Redis事务处理

Redis事务提供了一种命令执行队列的方式,从multi开始,exec执行,discard可取消事务。如果事务中命令有语法或运行错误,所有命令都不会执行。在事务处理中,可以使用watch进行条件监控,或者结合setnx实现分布式锁来确保特定条件下的操作安全。分布式锁通过设置key的过期时间避免超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis事务

Redis事务就是一个命令执行的队列,将一系列预定义命令包装成为一个整体,当执行的时候,一次性按照添加顺序依次执行后,中间不会被打断或者干扰

事务的基本操作

开启事务:multi,设定事务的开始位置,此指令执行后,后续的所有指令均加入到事务中

执行事务:exec,指定事务的结束位置,同时执行事务,与multi成对出现,成对使用

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

事务定义的过程出现了问题,怎么办???

取消事务:discard,终止当前事务的定义,发生在multi之后,exec之前

事务的工作流程

事务的注意事项

1、定义事务的过程中,命令格式输入错误怎么办

语法错误:指命令书写格式有误

处理结果:如果定义的事务中包含的命令存在语法错误,整体事务中所有命令均不会执行,包括那些语法正确的命令

2、定义事务的过程中,命令执行出现错误怎么办

运行错误:指的是命令格式正确,但是无法正确的执行,例如对list的incr操作

处理结果:能够正确运行的命令会执行,运行错误的命令不会被执行

注意:已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己再代码中实现回滚

1、基于特定条件的事务执行----

对key添加监视锁,在执行exec前如果key发生了变化,终止事务执行

watch key1 [key2...]

取消对所有key的监视

unwatch

2、基于特定条件的事务执行----分布式锁(解决超卖问题)

使用setnx设置一个公共锁

setnex lock-key value

利用setnx命令的返回值特征,有值则返回设置失败,无值则返回设置成功

  • 对于返回设置成功的,拥有控制权,进行下一步的具体业务操作
  • 对于返回设置失败的,不具有控制权,排队或者等待

操作完毕通过del操作释放锁

3、基于特定条件的事务执行---分布式改良锁

使用expire为锁key添加时间限定,到时间时不释放锁,放弃锁

expire lock-key second

expire lock-key milliseconds

由于操作通常是微秒或者毫秒级,因此该锁定时间不宜设置过大,具体时间需要业务测试后确认

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值