redis事务具有原子性和持久性吗?

 mobiledu2502861463 发布于 2022-10-25 05:03

redis事务具有原子性和持久性吗?

redis设计与实现 书中说:

Redis的事务总是具有ACID中的原子性、一致性和隔离性,当服务器运行在AOF
持久化模式下,并且appendfsync选项的值为always时,事务也具有耐久性。

可看网上资料,又说redis事务不满足原子性和持久性:

  • 在redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行,并不会自动回滚;

  • 在AOF的“总是 SYNC ”模式下,事务的每条命令在执行成功之后,都会立即调用fsync或fdatasync将事务数据写入到AOF文件。
    但是,这种保存是由后台线程进行的,主线程不会阻塞直到保存成功,所以从命令执行成功到数据保存到硬盘之间,还是有一段非常小的间隔,所以这种模式下的事务也是不持久的。

求解答~~

2 个回答
  • 首先redis是单线程的,所以其实是没有事务这个概念的,除非使用mutil手动的将一组命令封装到一起作为一个整体来执行,具体如果这个整体有一条指令失败会不会回滚可以自己做个测试。
    单线程所以每个命令都是原子性的,一致性和隔离性是针对事务来说的,redis的事务是通过将一组命令封装到一起执行所以是隔离性的,因为阻塞了其他命令的执行,至于一致性,如果上面你做的测试会回滚那么就是一致性的,不会滚那就不是一致性的。

    2022-10-26 14:18 回答
  • 这个主要是对redis原子性有疑问,现在已经查证,redis是不确保原子性的,事务中命令执行失败时,是不会回滚的。

    It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

    2022-10-26 14:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有