个人随笔
目录
20240613架构学习:用乐观锁解决并发冲突
2024-06-13 21:24:35

解决并发冲突,我们可以用最简单的解决方案for update行锁数据库,也可以借助redis分布式锁。

但是悲观锁for update并发性太差了,高并发场景用户体验差,redis由成本比较大,要引用新的中间件,会有新的业务问题。那么我们可以尝试使用乐观锁。

乐观锁

其实就是数据表加一个版本号。更新的时候带上查询出来的版本号,比如

  1. select id,version from table where id=1

获取到id为1,版本号为1,那么更新的时候就

  1. update table set a=100 ,version=version+1 where id=1 and version=1

按上面的情况,如果在update之前有别的线程更新了,那么就找不到version=1了,那么这条更新结果将为0,没有记录可以更新,此时我们可以直接返回失败,前端提醒说当前访问人数过多,请稍后重试,也可以用while循环上面的代码逻辑,设置重试次数,也可以用spring的@Retryable注解来进行重试

 16

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2