redis笔记 - redis事务

本文介绍了Redis事务的特性,包括其顺序执行、错误处理机制以及如何通过multi和exec开启与执行事务,同时讨论了discard用于取消事务。文章还探讨了锁的应用,如watch命令用于在事务开始前监控key的变化,以及分布式锁的概念,防止并发操作同一数据时的异常。最后,提到了死锁的解决方案,通过设置锁的超时时间避免长时间占用导致其他客户端无法操作。

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

事务说明

        redis事务就是连续顺序执行多条指令,中间不被打断或者干扰,一个队列中,一次性、顺序性、排他性的执行一系列命令。

事务的边界

        开启事务:multi

                开启事务,后续的所有指令均加入到事务中

        执行事务:exec

               结束向事务中添加指令并开始执行事务, 与multi成对使用

        取消事务:discard 

                结束当前事务且不执行事务中的指令,当发现指令录入异常或错误时,输入此命令结束当前事务

 

注意:

        1.指令集合中存在指令的语法错误会直接结束事务。

        2.指令集合中存在语法没有问题,但是无法正确执行的情况,例如数据类型不匹配等,会把能执行的执行了,不能执行的输出错误信息,需要程序员自己控制数据回滚。

        手动回归方案:在执行事务之前,先获取当前需要修改的数据和状态,当发现错误时在set回去

事务-锁

        锁的作用:在事务exec(执行)之前,如果数据发生了变化,则不再修改这个key的数据,避免对一个出现数据重复操作异常

        添加锁:watch key1 [key2......]

                需要在事务开启之前执行

        取消锁:unwatch

                在事务之前执行,会取消所有的锁

事务-分布式锁

        业务场景:redis是单线程的,但是存在多个客户端修改同一个数据的情况,不是watch监控一个值有没有改变能解决的问题

        执行逻辑:一个客户端拿到锁之后先把数据锁上再执行操作,其他客户端发现如果被锁上了只能等待,无法控制修改数据,当第一个客户端操作完成之后释放修改后的数据,第二个客户端才能拿到数据,并根据第一个客户端操作后的数据进行相应的业务判断或者控制修改数据。

        开启公共锁:setnx lock-key value

        setnx lock-需要锁的key ,value随意赋值即可

        释放锁:del lock-key

锁和分布式锁的区别

        锁:在事务上使用,多个客户端在操作同一个数据时,如果检测到数据被修改,阻断当前操作避免重复执行

        公共锁:多个客户端操作一个数据时,其他客户端等待当前客户执行完毕后接着执行。

死锁解决方案

        当一个客户端加锁以后一直不释放,其他客户端将会一直等待不能操作数据,可以可锁加个时效,当超过时效后自动释放,其他客户端可以接着操作。

        添加时效指令:

                在添加公共锁指令后开始执行

                expire lock-key second 设置秒锁

                pexpire lock-key milliseconds 设置毫秒级锁

具体锁的时间根据实际业务设定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值