redis之锁
redis 中的所分为悲观锁和乐观锁一个例子银行账户一共有10000元三个客户在三个取款机上操作A客户想取7000B客户想取5000C客户想取3000悲观锁在悲观锁的观点下,每一次操作都会修改数据,所以每一次拿数据的时候都会上锁也就是说在悲观锁的情况下,这三个客户是不允许在三个取款机上操作的,只能在一个取款机上操作因为当有一个客户在唯一的一台取款机上操作的时候,其他客户是不能操作的(不能动这比存款
·
锁分为悲观锁和乐观锁,redis只支持乐观锁
一个例子
- 银行账户一共有10000元
- 三个客户在三个取款机上操作
- A客户想取7000
- B客户想取5000
- C客户想取3000
悲观锁
一般传统的数据库中都是这种操作,比如表锁与行锁
- 在悲观锁的观点下,每一次操作都会修改数据,所以每一次拿数据的时候都会上锁
- 也就是说在悲观锁的情况下,这三个客户是不允许在三个取款机上操作的,只能在一个取款机上操作
- 因为当有一个客户在唯一的一台取款机上操作的时候,其他客户是不能操作的(不能动这比存款)
乐观锁
- 在乐观锁的观点下,每一次操作都不会修改数据,所以不会上锁,但是会在更新数据的时候判断一下是否有人修改了数据
- 也就是说三个客户在三个取款机上面操作,每个人操作的时候能看到的金额是10000,但是当真正取款的时候,可能由于其他客户的操作而导致自己取不到想要的金额
- 这个就优点秒杀的性质了
代码
WATCH key [key ...]
,当前命令可以监视一个或者多个key,如果事务执行之前,这些key被其他命令改动,那么事务将会被打断
- 我们设置一个
numb
的key
,他的value
为10 - 打开两个终端,这两个终端可以当做是两个取款机,并在这两个终端下监视
numb
- 两个终端都开启事务,第一个终端numb + 10 放入队列中,第二个终端 numb + 20放入队列中
- 将第一个终端队列的命令执行,然后将第二个终端的命令执行
第一个终端
第二个终端
我们会发现第一个终端的任务执行成功了,第二个终端的任务就会执行失败了
更多推荐
活动日历
查看更多
直播时间 2025-02-26 16:00:00


直播时间 2025-01-08 16:30:00


直播时间 2024-12-11 16:30:00


直播时间 2024-11-27 16:30:00


直播时间 2024-11-21 16:30:00


目录
所有评论(0)