Redis事务是否支持原子性?

因为 Redis 事务不支持事务回滚机制,所以如果事务执行中出现了命令执行错误(例如对 String 类型的key执行 LPUSH 操作),只会返回当前命令执行的错误给客户端,并不会影响下面命令的执行。因此很多人就觉得和关系型数据库(MySQL) 不一样,所以大家认为 Redis 事务不支持原子性。

但其实Redis意义上支持原子性的。正常情况下,它也是要不所有命令执行成功,要不一个命令都不执行。即使 Redis 不支持事务回滚机制,但是它会检查每一个事务中的命令是否错误。

MySQL 和 Redis 的定位不一样,一个是关系型数据库,一个是 NoSQL。

我们要注意一个点就是:Redis 事务使用事务队列来预先将执行命令存储起来,并且会对其进行格式检查,提前就可以知道这些命令是否可执行。而对于一些开发者自己的逻辑错误,例如对 String 类型的key执行LPUSH 操作,在事务执行过程中就会出现了命令执行错误,而这些错误都是开发时可以被检测出来的,生产环境中不应该存在。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐