MySQL中的乐观锁

2018-12-09  本文已影响61人  youthcity

什么是乐观锁

与悲观锁相比,乐观锁认为数据一般不会发生变化,因此不会加锁,但是在更新数据时会对数据进行比较,若数据没有变化,则进行更新,否则不进行更新。

适用场景

适用于读多写少的场景。

如何实现乐观锁

方式1:版本号机制

给表增加一个 version 版本号字段,具体流程如下:

方式2:记录时间戳

原理与方式一相同,给表增加一个记录操作的时间戳字段,当发生数据更新时,将当前时间戳与更新前获取的时间戳进行对比,若相同,则允许更新,且同时更新操作时间戳字段,否则更新失败。

优缺点

优点

缺点

对于写多的场景并不适用,因为当写操作非常频繁时,更新失败的几率就越大,上层逻辑进行retry的次数也会增多,从而降低了系统的性能。

总结

不管是乐观锁还是悲观锁,其目的都是为了保障数据的一致性。乐观锁与悲观锁的区别在于,乐观锁会在更新前比较数据是否发生变化,若变化则更新失败。悲观锁则是等待前一个事务完成才执行自己的操作。

参考资料

上一篇 下一篇

猜你喜欢

热点阅读