老师你好,我看你讲解通过版本号实现乐观锁的时候,你说如果真实系统中简单这么做的话是有问题的,这个具体是什么问题呢?我感觉使用版本号匹配的话,没有问题啊

来源:3-12 锁模块之MyISAM与InooDB关于锁方面的区别_2

慕仔3163040

2019-09-08

老师你好,我看你讲解通过版本号实现乐观锁的时候,你说如果真实系统中简单这么做的话是有问题的,这个具体是什么问题呢?我感觉使用版本号匹配的话,没有问题啊,没有思考出来有问题的场景,麻烦老师解答下~

写回答

1回答

翔仔

2019-09-10

同学好,首先,相比悲观锁,乐观锁的话是到提交的时候才会去检查是否能够执行成功,这也就意味着,针对写多读少的场景来讲,往往会造成写入要重试多次,增加读取次数,影响用户体验;其次,这里说的"简单这么做"是指单纯通过数据库表的版本字段去控制,这个会有问题,特别是针对分布式计算系统,如果只有单库,仅通过该库查询版本号会有性能瓶颈,如果将版本号副本存储到多个数据库中又会造成数据不一致

3
4
翔仔
回复
慕仔3163040
同学好,就是并发量小的时候,使用cas+mysql,并发量大的时候,把请求放入redis队列里,结合redis本身实现的CAS乐观锁,可以看看这个 https://learnku.com/articles/25070
2019-09-26
共4条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程