Redis事务模式演示

Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能, 本章首先讨论使用 MULTI 、 DISCARD 和 EXEC 三个命令实现的一般事务, 然后再来讨论带有 WATCH 的事务的实现。

Redis事务模式演示

Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能

  • MULTI开启事务 begin
  • DISCARD撤销事务 rollback
  • EXEC执行事务 commit
  • WATCH监控事务

Redis事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制, 并且事务在执行的期间不会主动中断 —— 服务器在执行完事务中的所有命令之后, 才会继续处理其他客户端的其他命令。

执行事务DEMO

Redis事务模式演示

回滚事务演示

Redis事务模式演示

那么redis是怎么实现的呢?

当客户端处于非事务状态下时, 所有发送给服务器端的命令都会立即被服务器执行:

Redis事务模式演示

当客户端进入事务状态之后, 服务器在收到来自客户端的命令时, 不会立即执行命令, 而是将这些命令全部放进一个事务队列里, 然后返回 QUEUED , 表示命令已入队

Redis事务模式演示

Redis事务模式演示

现在来说最后一个关键字WATCH

WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。

以下示例展示了一个执行失败的事务例子:

Redis事务模式演示

以下执行序列展示了上面的例子是如何失败的:

Redis事务模式演示

在时间 T4 ,客户端 B 修改了 name 键的值, 当客户端 A 在 T5 执

Redis事务模式演示

行 EXEC 时,Redis 会发现 name 这个被监视的键已经被修改, 因此客户端 A 的事务不会被执行,而是直接返回失败。


分享到:


相關文章: