Redis事务模式演示
Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能, 本章首先讨论使用 MULTI 、 DISCARD 和 EXEC 三个命令实现的一般事务, 然后再来讨论带有 WATCH 的事务的实现。
Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能
- MULTI开启事务 begin
- DISCARD撤销事务 rollback
- EXEC执行事务 commit
- WATCH监控事务
Redis事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制, 并且事务在执行的期间不会主动中断 —— 服务器在执行完事务中的所有命令之后, 才会继续处理其他客户端的其他命令。
执行事务DEMO
回滚事务演示
那么redis是怎么实现的呢?
当客户端处于非事务状态下时, 所有发送给服务器端的命令都会立即被服务器执行:
当客户端进入事务状态之后, 服务器在收到来自客户端的命令时, 不会立即执行命令, 而是将这些命令全部放进一个事务队列里, 然后返回 QUEUED , 表示命令已入队
现在来说最后一个关键字WATCH
WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。
以下示例展示了一个执行失败的事务例子:
以下执行序列展示了上面的例子是如何失败的:
在时间 T4 ,客户端 B 修改了 name 键的值, 当客户端 A 在 T5 执
行 EXEC 时,Redis 会发现 name 这个被监视的键已经被修改, 因此客户端 A 的事务不会被执行,而是直接返回失败。