请教一个关于多人同时操作一条数据的问题

2021-07-12 16:58:04 +08:00
 Spider1996

目前有个场景: 比如 A 用户选中一条数据进入设计页面,然后在 A 用户保存之前其它用户都不能操作这条数据.有什么比较好的处理 方法吗?

2684 次点击
所在节点    Java
29 条回复
xx6412223
2021-07-13 13:47:44 +08:00
用乐观锁更合适吧
shellus
2021-07-14 11:41:59 +08:00
@chenshun00 最烦这些动不动就 redis 的。
leohuangsulei
2021-07-14 13:49:42 +08:00
@shellus 那不用 redis,用户直接关闭浏览器,这个数据,别人还要不要操作了?直接起定时任务改数据库中数据的状态吗?
leohuangsulei
2021-07-14 13:51:26 +08:00
@Spider1996 那就续期呗,js 定时发送请求,更新 redis 里面的过期时间
saulshao
2021-07-14 13:51:41 +08:00
你这个就是给这条记录定义一个状态,然后用户 A 一旦开始编辑操作,就把这个状态更新为编辑中。
直到用户 A 编辑完成(设一个显式的按钮)为止,其他人都只能看。没必要想那么复杂。
管它掉线之类的,一概不理。
liukanshan
2021-07-14 16:28:14 +08:00
没有必要用什么分布式锁吧 在数据库加一个版本号来实现乐观锁就可以了 你说的操作这条数据应该是指修改这条数据吧 读不用加锁
changwei
2021-07-14 23:28:08 +08:00
我也很好奇,google docs 两个人同时修改同一个 excel 文件的同一个单元格会怎么样呢,有没有人研究过他们的原理
shellus
2021-09-28 17:33:48 +08:00
```
# 进入编辑, 成功的话这条 sql 更新记录数 1,如果被占用,就是更新记录数 0
update posts set current_edit_uid='A', lock_time='当前时间戳' where id=123 and (current_edit_uid is null or lock_time<'当前时间-60 秒')
# 编辑中续期,影响条数为 0 表示超时,已经被别人编辑了
update posts set lock_time='当前时间戳' where id=123 and current_edit_uid='A'

```
shellus
2021-09-28 17:34:43 +08:00
@leohuangsulei 不用 redis 一样可以实现超时啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789061

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX