redis-悲观锁与乐观锁

悲观锁与乐观锁

事务应用场景

  • 一个请求想给余额减8000
  • 一个请求想给余额减5000
  • 一个请求想给余额减1000

在这里插入图片描述

悲观锁(Pessimistic Lock)

每次去拿数据的时候都认为别人会修改,所以在每次拿数据的时候都会上锁,这样别人想拿这个数据就 会阻塞,直到它拿到锁。传统关系型数据库就用到很多悲观锁,比如行锁、表锁等。

在这里插入图片描述

乐观锁(Optimistic Lock)

每次去拿数据的时候都认为别人不会修改,所以不会上锁,但在更新的时候会判断一下在此期间别人有 没有去更新这个数据,可以使用版本号机制。乐观锁适用于多读的应用类型,可以提高吞吐量。Redis就 是乐观锁机制实现事务的。

在这里插入图片描述

Redis中的乐观锁

watch key [key……]

在执行multi之前,先执行watch监视一个或多个key,如果在事务执行之前这个(或这些)key被其它命 令所改动,那么事务将被打断。

例:开启两个客户端

1号客户端
set money 10000 设置一个money的key
watch money 监视money
multi 开启事务
set money 100 修改money,暂时不执行事务
2号客户端
watch money 监视money
multi 开启事务
set money 110 修改money,暂时不执行事务
1号客户端
exec 执行事务,返回成功
2号客户端
exec 执行事务,更新失败

1号客户端:

在这里插入图片描述

2号客户端:

在这里插入图片描述

unwatch

取消watch命令对所有key的监视

如果在执行watch命令之后,exec命令或discard命令先执行的话,那么就不需要再执行unwatch。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

途中刂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值