Redis锁,乐观锁与悲观锁

悲观锁

  • 认为什么时候都会出问题,无论做什么都会加锁

乐观锁

  • 很乐观,认为什么时候都不会出问题,所以不会上锁。

  • 更新数据时去判断一下,在此期间,是否有人修改过这个数据

  • 应用于:秒杀场景

**watch**相当于乐观锁

  • 正常执行
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set money 100
QUEUED
127.0.0.1:6379(TX)> set out 0
QUEUED
127.0.0.1:6379(TX)> decrby money 20
QUEUED
127.0.0.1:6379(TX)> incrby out 20
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) OK
3) (integer) 80
4) (integer) 20
  • 非正常执行【原线程才执行一半,又出现新的线程,把原数据修改了时候】

1、先加入事务,但是没有执行

在这里插入图片描述

加入新的线程,修改了数据

在这里插入图片描述

执行结果

在这里插入图片描述

解决方案

#解锁
127.0.0.1:6379> UNWATCH
OK
#再次监视 ,这次监视的是  新线程Set之后 的值
watch money

上一篇:(分享)一个图片添加水印的小demo的页面,可自定义样式


下一篇:P2638 安全系统题解