Redis的事务(部分支持)

本文总结了Redis的事务功能,包括WATCH、MULTI、EXEC、DISCARD和UNWATCH命令的使用。Redis事务具备全体连坐性质,即全部命令要么都成功执行,要么全部失败。同时,介绍了乐观锁的概念和Redis如何通过WATCH实现类似功能,确保并发场景下的数据一致性。

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

假期过了,赶紧来更新一下东东,最近项目一直处于上线阶段,每天加班调试优化模块功能,导致好几天回到家已经是后半夜了。好了,言归正传。
关于Redis事务一些小小的总结
    一说到事务,肯定想到的是像传统关系型数据库那样,要么全部成功,要么全部失败。事务的四大特性ACID信手拈来。但这里对不起了,Redis事务可跟关系型数据库不太一样了,因为它只是部分支持事务,下文会详细的说明。
    是什么?可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他事务插入,不许加塞
    能干嘛?一个队列中,一次性,顺序性,排他性的执行一系列命令
    怎么玩?开启事务使用MULTI,但不见得开启,redis会返回ok代表我收到了,所有命令使用EXEC调用,使用DISCARD放弃事务,表示不玩了

常用的命令有:
WATCH key(keys) 监视一个或多个key,如果在事务执行之前这个或这些key被其他命令所改动,那么事务将被打断
MULTI 标记一个事务块的开始
EXEC 执行所有事务块内的命令
DISCARD 取消事务,放弃执行事务块内的所有命令
UNWATCH 取消WATCH 命令对所有 key 的监控
1:正常执行 MULTI … EXEC
2:放弃事务 DISCARD
3:全体连坐 要么全部成功,要么全部失败,命令错误
4:冤头债主 命令正确,但执行失败报错
5:watch监控:

  1. 悲观锁/乐观锁/CAS(check and set)
    悲观锁:锁整张表,性能极差,但一致性很高
    乐观锁:为了即保证高并发,又保证不说整张表,在每条记录后面加一个version版本号
  2. 无加塞篡改,先监控在开启MULTI,保证两笔金额变动在同一个事务内
  3. 有加塞篡改,横刀夺爱,先watch key 修改value 别人改了 那么失败了。 如果我知道别人改了,我先unwatch 在watch 在multi 然后修改 在exec提交执行

三个阶段:
1. 开启:以MULTI开始一个事务
2. 入队:将多个命令入队到事务中,找到这些命令并不会立即执行,而是放到等待执行事务队列里面
3. 执行:由EXEC命令触发事务
三个特性:单独的隔离操作:事务的所有命令都会序列化、按顺序地实行
没有隔离级别的概念:事务提交前任何指令都不会被实际执行
不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,不回滚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值