并发采用乐观锁的疑问
在数据库中采用乐观锁方式,从取出数据到写入数据中间有可能被改写,这种概率在高并发下应该不小吧,这种情况大家是怎么处理的。有没有更好的办法
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在数据库中采用乐观锁方式,从取出数据到写入数据中间有可能被改写,这种概率在高并发下应该不小吧,这种情况大家是怎么处理的。有没有更好的办法
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
你这种情况只可能出现在READ UNCOMMITTED的事务隔离级别,READ COMMITTED 就不会有这种问题
这种我用的独占锁。比如说秒杀抢购之类的。
可以不使用数据库中的乐观锁或者悲观锁控制,使用程序实现。地址
乐观锁本质不是锁,而是Check And Set(检查,如果没有修改过,则写入).
比如基于数据库的会话存储系统:
乐观锁在不容易发生冲突的场合才高效,而高并发下冲突是很难避免的.
如果频繁发生冲突,导致操作失败,那处理一次请求的资源就白白浪费了.
其实操作失败也无所谓,给用户个提示就好了.
因为就算是传统的事务,也存在失败回滚的情况.
如果商品库存不够,或者用户余额不够,这次购买的事务都会失败ROLLBACK.
这里的all_success表示两条UPDATE成功,各自受影响的行(affected_rows/rowCount)都是1行.