1.Redis事务的概念
Redis事务的本质是通过MULTI、EXEC、WATCH等一组命令的集合,将一个队列中的一系列的命令一次性、顺序性、排他性的执行。
2.Redis事务的执行步骤
(1) 事务开始:multi 命令用于开启事务。
(2)命令入队:将待需执行的命令依次添加到队列中。
(3)事务执行:exec 命令用于执行队列中的事务。
3.Redis事务相关命令
(1)MULTI: 标记一个事务块的开始。
(2)EXEC: 执行所有事务块内的命令。
(3)WATCH key [key …]: 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
(4)UNWATCH: 取消 WATCH 命令对所有 key 的监视。
(5)DISCARD: 取消事务,放弃执行事务块内的所有命令。
4.事务管理(ACID)概述
Redis的事务总是具有ACID中的一致性和隔离性,其他特性是不支持的。当服务器运行在AOF持久化模式下,并且appendfsync选项的值为always时,事务也具有持久性。
- 原子性(Atomicity):指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):事务前后数据的完整性必须保持一致。
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行持久性。
- 持久性(Durability):指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
(1)Redis 是单线程运行,在同一时刻只能有一个客户端操作数据,不可能出现多个客户端同时修改某一key而导致的数据不一致的问题。因此,Redis 的事务是总是带有一致性、隔离性的。
(2)Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。