个人理解这个问题需要分两种情况讨论
multi开启事务后命令队列语法有错误或取消事务discardmulti开启事务后命令队列运行错误
第一种情况
可以看到开启事务后输入一个错误语法命令get name zhangsan后立即显示错误提示了,再执行exec自然也是不行的,所有命令都不会执行。
discard的情况就不用说了,取消事务。
这种情况下是满足事务的原子性的,要不所有命令执行成功,要不一个命令都不执行。
第二种情况
开启事务后命令语法正确,但是在命令执行期间出错,如输入参数的数据类型不符合命令的参数要求。
set name后用了list的指令,可以看到命令执行后,能够正确运行的命令会执行,运行错误的命令不会被执行。这种情况下Redis 事务其实不满足原子性的,也就是Redis 不支持事务回滚机制,运行错误需要手动回滚(应该避免)。
为什么Redis不支持回滚
官方文档说明: