欢乐锁和悲观锁的小问题

前辈们好!问题如下:

面试的时候经常被问道欢乐锁和悲观锁的区别,小弟想知道,什么情况下用欢乐锁,什么情况下用悲观所,以及如何实现欢乐锁和悲观锁?

问题有点多,谢谢回答。

阅读 3.1k
3 个回答
新手上路,请多包涵

悲观锁是显式的,乐观锁是MVCC

简单来说. 乐观锁就是先让所有并发访问都能访问到数据. 在他们提交数据的时候做版本判断. 如果版本不对. 就提交失败. 悲观锁就是 在并发访问的时候排队. 也可以看作是串行的提交. 比如redis. 用的就是乐观锁. 并发提交时. 先让大家都获取一个类似于版本记录的值. 然后真正提交时. 会对比这个值. 如果不符合就提交失败. 这样保证只有一个能提交成功. 而悲观锁会在提交前 获取一个类似于写锁的东西. 只准一个人在那写. 不能并发. 比如mysql如果你select 的时候使用了 for update 这样的语句. 也就相当于手动加上了一个悲观锁.

推荐问题