Redis 只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一次执行多个命令,在事务执行过程中,会顺序执行队列中的命令,其他客户端提交的命令请求不会插入到本事务执行命令序列中。命令的执行过程是顺序执行的,但不能保证原子性。无法像 MySQL 那样,有隔离级别,出了问题之后还能回滚数据等高级操作。后面会详细分析。
Redis 提供了如下几个事务相关的基础指令。
MULTI开启事务,Redis 会将后续命令加到队列中,而不真正执行它们,直到后续使用EXEC来原子化的顺序执行这些命令EXEC执行所有事务块内的命令DISCARD取消事务,放弃执行事务块内所有的命令WATCH监视一个或多个 key,若事务在执行前,这些 key 被其他命令修改,则事务被终端,不会执行事务中的任何命令UNWATCH取消 WATCH命令对所有 keys 的监视一般情况下,一个简单的 Redis 事务主要分为如下几个部分:
MULTI开启一个事务。QUEUED消息。EXEC提交事务,Redis 会依次执行队列中的命令,并依次返回所有命令的结果。(若想放弃提交事务,则执行DISCARD)。下图简单介绍了下 Redis 事务执行的过程:

下面我们来通过一些实际具体例子,来体会下 Redis 中的事务。前面我们也说到 Redis 的事务不是正真的事务,是无法完全满足标准事务的ACID特性的。通过下面的例子,我们来看看,Redis 的“破产版”事务到底存在什么问题。
- 127.0.0.1:6379> MULTI
- OK
- 127.0.0.1:6379> SET a 1
- QUEUED
- 127.0.0.