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无法进行购买,只有解锁才可以进行操作
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值