1.基本概念:
Redis 事务(Redis Transactions)允许将一组命令按照顺序执行,并且保证这些命令在事务中要么全部执行成功,要么全部不执行。Redis 通过 MULTI
、EXEC
、DISCARD
和 WATCH
这些命令实现了事务功能。
2.四个关键命令:
MULTI
:标记事务的开始。在调用MULTI
后,所有接下来的命令都会进入一个队列,等到执行EXEC
时才会依次执行。
EXEC
:执行所有在MULTI
后排队的命令。如果在事务期间有任何错误(如语法错误),该命令会导致整个事务执行失败。
DISCARD
:取消事务,放弃所有MULTI
之后排队的命令。
WATCH
:在事务执行之前监视一个或多个键。如果这些键在事务执行前被修改,则事务不会执行,而是返回空结果(类似乐观锁机制)。
3.示例:
MULTI # 开始事务
SET key1 value1 # 将 key1 设置为 value1
INCR key2 # 对 key2 执行递增操作
EXEC # 执行事务
如果在 MULTI
之后执行命令时有错误,Redis 会记录该错误,但并不会影响后续命令进入队列。只有当执行 EXEC
时,Redis 才会检查是否有语法错误。如果所有命令都合法,Redis 会按顺序执行;否则,整个事务失败。
4.Redis 事务的特性:
- 原子性:事务中的每个命令是单独执行的,Redis 不保证事务中的命令是原子操作,也就是说,其他客户端可以在事务执行的过程中访问这些数据。它不同于 SQL 数据库的隔离级别,Redis 事务并不具备真正的隔离性。
- 单一性:在 Redis 事务中,每条命令都会按照顺序执行,但执行过程中其他客户端可以插入命令或修改数据。
5.Redis 的事务模式具备如下特点:
(1).不保证隔离性;
(2).无法保证持久性;
(3).具备了一定的原子性,但不支持回滚
(4).一致性的概念有分歧,假设在一致性的核心是约束的语意下,Redis 的事务可以保证一致性
6.总结:
Redis 事务适合用于需要将多个操作捆绑在一起的场景,但需要注意事务并不能保证与 SQL 数据库类似的严格隔离性或回滚特性。