Redis事务及锁的相关操作和实例

什么是事务

redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时,一次性按照顺序依次执行,中间不会被打断。

一个队列中,一次性、顺序性、排他性的执行一系列命令

  1. 事务的基本操作:
  • 开启事务(事务的开启位置) multi
  • 执行事务(事务的结束位置) exec
  • 取消事务 discard

加入事务的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行

  1. 例子
  1. 用户1先设置num=10,然后开启事务,并重新设置num=5,此时用户1还没有提交事务
    在这里插入图片描述

  2. 此时用户2对num设置为19,此时用户1还没有提交事务
    在这里插入图片描述

  3. 此时用户1提交事务,再get num时值就变成了5,而不是19,然后在用户2中值也变成了5(这里就体现出事务的回滚)
    在这里插入图片描述
    在这里插入图片描述

基于特定条件的事务执行——分布式锁

  1. 使用setnx设置一个公共锁 setnx lock-key value

  2. 使用expire为锁key添加时间限定
    expire lock-key second | pexpire lock-key milliseconds

业务场景
京东在618活动中,客户购买热情高涨,不一会儿就将所有商品购买完毕,如何避免最后一件商品不被多人同时购买(超卖问题),并且如果最后一个商品被别人买了会提示要在30分钟内付款,否则会取消订单,这样其他抢购的人会在页面上显示你还有机会,当前还有人未付款。

1) 用户1抢购到该商品

在这里插入图片描述
2) 由于此时给该商品加锁,因此用户2无法进行购买,只有解锁才可以进行操作
在这里插入图片描述

发布了85 篇原创文章 · 获赞 9 · 访问量 6697

猜你喜欢

转载自blog.csdn.net/weixin_43517302/article/details/105594933
今日推荐