redis-check-aof
工具检测 AOF 日志文件,可以把未完成的事务操作从 AOF 文件中去除 。这样一来,使用 AOF 文件恢复实例后,事务操作不会被再执行,从而保证了原子性 。若使用的 RDB 模式,最新的 RDB 快照是在 EXEC 执行之前生成的,使用快照恢复之后,事务中的命令也都没有执行,从而保证了原子性 。若 Redis 没有开启持久化,则重启后内存中的数据全部丢失,也就谈不上原子性了 。
- 一致性(C)
- EXEC 执行之前,入队报错(实例分析中的语法错误)
- EXEC 执行之后,实际执行时报错(实例分析中的运行时错误)
- EXEC 执行时,实例宕机
redis-check-aof
清除事务中已经完成的操作,数据库恢复后数据也是一致的 。- 隔离性(I)
- 并发操作在 EXEC 执行前,隔离性需要通过 WATCH 机制来保证
- 并发操作在 EXEC 命令之后,隔离性可以保证
情况 a可以参考前面的实例分析 WATCH 命令的使用 。情况 b,由于 Redis 是单线程执行命令,EXEC 命令执行后,Redis 会保证先把事务队列中的所有命令执行完之后再执行之后的命令 。
- 持久性(D)
关于 Redis 在开启持久化之后,为啥还会丢失数据,笔者会单独整理一篇 Redis 持久化与主从相关的文章来介绍,此处简单说下 。如果配置了 RDB 模式,在一个事务执行后,下一次 RDB 快照还未执行前,Redis 实例发生了宕机,数据就会丢失、如果配置了 AOF 模式,而 AOF 模式的三种配置选项 no,everysec,always 也都可能会产生数据丢失的情况 。总结一下,Redis 事务对 ACID 的支持情况:
- 具备一定的原子性,但不支持回滚
- 满足一致性
- 满足隔离性
- 无法保证持久性
【说说 Redis 事务】What about rollbacks?Redis does not support rollbacks of transactions since supporting rollbacks would have a significant impact on the simplicity and performance of Redis.
经验总结扩展阅读
- Spring事务传播行为实战
- 暗示某人嘴贱的句子 想发一个骂人的朋友圈说说
- 关于苦与甜的优美句子 苦尽甘来的短句说说
- 骂变态带脏字越难听越好 讽刺小人的经典说说
- 17 基于SqlSugar的开发框架循序渐进介绍-- 基于CSRedis实现缓存的处理
- 关于开车的搞笑句子 开破车泡妞的说说
- 家人的关心最温暖词句 有亲人的关心真好的说说
- 关心家庭的话语暖心说说 情商高的人感谢亲人的话
- 人心太假太虚伪的句子说说 明白一些事看清一些人
- 哪些星座说爱你只是说说还是用心的