👌redis事务保证原子性吗,支持回滚吗?
题目详细答案
不支持。
先来回顾两个命令:
MULTI:开启一个事务。之后的所有命令都会被放入一个队列中,直到EXEC命令执行。
EXEC:执行之前队列中的所有命令。
在MULTI和EXEC之间的命令会被放入一个队列中,直到EXEC命令执行时,这些命令才会按顺序执行。
在EXEC命令执行时,所有被MULTI命令包裹的命令会按顺序一次性执行。意味着在EXEC执行时,Redis会将所有命令作为一个整体进行处理。Redis保证单个命令的原子性,即每个命令在执行时是不可分割的。
但是,Redis事务并不完全等同于传统关系型数据库的事务。
如果在EXEC执行过程中某个命令失败(例如,命令语法错误),该命令会被跳过,但其他命令仍然会继续执行。这与关系型数据库的事务不同,后者通常会在某个命令失败时回滚整个事务。
Redis事务没有回滚机制。如果某个命令执行失败,已经执行的命令不会被撤销。
redis再执行lua脚本的时候,会封装为一个事务,不可中断;