redis设计与实现 书中说:
Redis的事务总是具有ACID中的原子性、一致性和隔离性,当服务器运行在AOF
持久化模式下,并且appendfsync选项的值为always时,事务也具有耐久性。
可看网上资料,又说redis事务不满足原子性和持久性:
在redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行,并不会自动回滚;
在AOF的“总是 SYNC ”模式下,事务的每条命令在执行成功之后,都会立即调用fsync或fdatasync将事务数据写入到AOF文件。
但是,这种保存是由后台线程进行的,主线程不会阻塞直到保存成功,所以从命令执行成功到数据保存到硬盘之间,还是有一段非常小的间隔,所以这种模式下的事务也是不持久的。
求解答~~
これは主に redis のアトミック性に関する疑問によるもので、redis がトランザクションでコマンドの実行に失敗した場合、ロールバックされないことが確認されました。
まず第一に、redis はシングルスレッドであるため、mutil を使用して一連のコマンドを手動でカプセル化し、それらを全体として実行しない限り、実際にはトランザクションの概念がありません。具体的には、全体の 1 つの命令が失敗した場合に発生します。自分でロールバックできますか? テストを受けてください。
シングルスレッドなので、各コマンドはアトミックです。Redis トランザクションは、コマンドのグループをカプセル化することによって実行されます。そのため、一貫性に関しては、テストの場合、それらのトランザクションは分離されます。上記を実行するとロールバックされ、その場合は一貫性があり、ロールバックしない場合は一貫性がありません。