一、事务的基本属性
事务是数据库的一个重要功能。所谓的事务,就是指对数据进行读写的一系列操作。事务在执行时,会提供专门的属性保证,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),也就是 ACID 属性。这些属性既包括了对事务执行结果的要求,也有对数据库在事务执行前后的数据状态变化的要求。
二、事务 ACID 属性的要求
- 原子性:一个事务中的多个操作必须都完成,或者都不完成
- 一致性:指数据库中的数据在事务执行前后是一致的
- 隔离性:数据库在执行一个事务时,其它操作无法存取到正在执行事务访问的数据
- 持久性:数据库执行事务后,数据的修改要被持久化保存下来。当数据库重启后,数据的值需要是被修改后的值。
三、Redis 如何实现事务?
事务的执行过程包含三个步骤,Redis 提供了 MULTI、EXEC 两个命令来完成这三个步骤。
- 客户端要使用一个命令显式地表示一个事务的开启。在 Redis 中,这个命令就是 MULTI。
- 客户端把事务中本身要执行的具体操作(例如增删改数据)发送给服务器端。这些操作就是 Redis 本身提供的数据读写命令,例如 GET、SET 等。不过,这些命令虽然被客户端发送到了服务器端,但 Redis 实例只是把这些命令暂存到一个命令队列中,并不会立即执行。
- 客户端向服务器端发送提交事务的命令,让数据库实际执行第二步