如果是 pg 的话,可以考虑用 advisory_lock,读之前针对 user_id 的值加锁,更新完解锁,这样不会对表或者行加高级的锁,避免影响其他业务,也可以避免引入 redis 带来的通讯开销,应该是性能非常高的方案了
@avadakur 其实有办法处理的,你这种场景。 1. 考虑你的版本号就不要使用需要自己处理自增的形式,换成毫秒甚至纳秒时间戳,请求必然有个先来后到的 2. 考虑使用事务进行两次插入,先插入一次获取自增 id ,再结合自增 id 更新版本号 3. 最简单,就还是前面几楼提到的:用一个自增操作不就完事了?