我目前的做法是用乐观锁,给每个集合加了一个单独的行,比如(小明,吃饭,version ),这一行的 version 专门用来做小明吃饭的自增,每次自增用乐观锁,每次插入新的数据,先更新这一行的 version,如果更新成功,就用新的 version 作为插入的 version,如果失败,则退回重试。
w7938940
2019-06-03 12:21:05 +08:00
在这块业务的代码加个锁,保证多个进程不会同时执行这块代码,锁可以用 redis 实现
chmaple
2019-06-03 12:53:58 +08:00
@chaleaochexist 两个都读到 2,然后各自+1,执行 update set ...version = where id= and version=到数据库的时候,只有一条能执行成功,另一条 update 的返回 int 是 0,没有匹配的记录。 数据库 MySQL 默认级别是 repeatableRead。 就是要做好事务回滚的准备。