【转载】Redis 乐观锁

转自:https://blog.csdn.net/qq_38322527/article/details/112437041

什么是锁?

锁的作用:在进行数据库操作时,A 用户更新数据的同时B 用户不能更新!
如果没有锁的情况下,AB 同时更新数据,数据库中的数据为最后提交的数据。
在数据库设计上,锁分为悲观锁和乐观锁。

悲观锁

在数据库数据操作时,如果 A 用户查询到指定的数据,并增加 for update 属性后,
select * from user where id = 1 for update;
此时的数据库将该数据加锁,B 用户需要修改该数据,只能在 A 用户事务提交或断开连接后才能执行数据操作。
悲观锁基于数据库操作实现

乐观锁

基于算法实现。悲观锁在执行时,会将其他数据库请求拦截,使其他请求等待,而乐观锁在执行时不会阻碍其他请求。
参考:https://www.cnblogs.com/YMWH/articles/16467361.html

  • 我们在redis中使用watch这个语法来对某一个值进行监控,在redis事务结束的时候,watch监控也就结束了。
  • 如果redis中对某一个值进行监控后,有另一个进程对该值进行了修改,那么操作该值的事务会执行失败。
  • 如果watch后的事务执行失败,可以使用unwatch进行解锁,然后再重新进行监视。
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注