【高频 Redis 面试题】Redis 事务是否具备原子性? (2)

下面我们演示一下:

【高频 Redis 面试题】Redis 事务是否具备原子性?


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

2、但是其实 Redis 意义上是支持原子性的。

正常情况下,它也是要不所有命令执行成功,要不一个命令都不执行。

我们下面演示一下:

全部执行成功的:

在这里插入图片描述


一个都不执行:

在这里插入图片描述


这就是上面提到的,在事务开始后,用户可以输入事务要执行的命令;在命令入事务队列前,会对命令进行检查,如果命令不存在或者是命令参数不对,则会返回错误可客户端,并且修改客户端状态。

当后面客户端执行 EXEC 命令时,服务器就会直接拒绝执行此事务了。

所以说,Redis 事务其实是支持原子性的!即使 Redis 不支持事务回滚机制,但是它会检查每一个事务中的命令是否错误。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwwfw.html