Redis 事务与关系型数据库事务的主要区别是什么?

Sherwin.Wei Lv7

Redis 事务与关系型数据库事务的主要区别是什么?

回答重点

Redis 的事务跟严格意义上的关系型数据库事务不一样,先复习下数据库事务 ACID 的定义:

  • 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,且可以回滚到事务开始前的状态。
  • 一致性(Consistency):事务执行前后,数据库必须保持一致的状态。
  • 隔离性(Isolation):事务的执行是隔离的,事务之间不会相互干扰。支持不同的隔离级别(如读未提交、读提交、可重复读、序列化)。
  • 持久性(Durability):一旦事务提交,数据变更就会永久保存在数据库中。

我们一一对比下 Redis 中的事务是否符合 ACID:

  • 原子性:Redis 事务提供部分原子性,但不是完整的ACID事务。如果事务中的一个命令失败,其他命令仍然会继续执行,事务不会自动回滚
  • 一致性:无法回滚,无法保证一致性。
  • 隔离性:Redis 事务使用的是单线程模型,在执行事务的过程中,其他命令不会插入到事务执行的过程中,但无法设置不同隔离级别。
  • 持久性:Redis 事务的持久性依赖于配置(如 RDB 快照和 AOF),但理论上还是会丢数据。

所以, Redis 的事务根本就不是我们理解的传统事务。

扩展知识

Redis 事务简单介绍

1)Redis 的事务是通过 MULTI、EXEC、DISCARD 和 WATCH 命令来控制的。

事务开始时用 MULTI 命令,此后的所有命令都不会被立即执行,而是被放入一个队列。要执行 exec 命令才会原子性连续执行,其间不会被插入其他命令。

2)事务的执行不支持回滚,如果中间命令出错后续的命令还是会继续执行,且不会回滚之前的执行。

3)Redis 使用 WATCH 命令实现乐观锁机制。如果被 WATCH 监控的键改变,则直接中断事务,并不会回滚。

Comments
On this page
Redis 事务与关系型数据库事务的主要区别是什么?