009_Redis的事物

1. Redis事务可以一次执行多个命令, 并且带有以下三个重要的保证:

1.1. 批量操作在发送exec命令前被放入队列缓存。

1.2. 收到exec命令后进入事务执行, 事务中任意命令执行失败, 其余的命令依然被执行。

1.3. 在事务执行过程, 其他客户端提交的命令请求不会插入到事务执行命令序列中。

2. 一个事务从开始到执行会经历以下三个阶段:

2.1. 开始事务。

2.2. 命令入队。

2.3. 执行事务。

3. 单个Redis命令的执行是原子性的, 但Redis没有在事务上增加任何维持原子性的机制, 所以Redis事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本, 但批量指令并非原子化的操作, 中间某条指令的失败不会导致前面已做指令的回滚, 也不会造成后续的指令不做。

4. watch命令

4.1. watch命令用于监视一个(或多个)key, 如果在事务执行之前这个(或这些)key被其他命令所改动, 那么事务将被打断。

4.2. 语法: watch key [key ...]。

4.3. 总是返回OK。

5. unwatch命令

5.1. unwatch命令用于取消watch命令对所有key的监视。

5.2. 语法: unwatch。

5.3. 总是返回OK。

6. multi命令

6.1. multi命令用于标记一个事务块的开始。

6.2. 事务块内的多条命令会按照先后顺序被放进一个队列当中, 最后由exec命令原子性(atomic)地执行。

6.3. 语法: multi。

6.4. 总是返回OK。

7. exec命令

7.1. exec命令用于执行所有事务块内的命令。

7.2. 语法: exec。

7.3. 假如某个key(或某些)正处于watch命令的监视之下, 且事务块中有和这个(或这些)key相关的命令, 那么exec命令只在这个(或这些)key没有被其他命令所改动的情况下执行并生效, 否则该事务被打断(abort)。

7.4. 事务块内所有命令的返回值, 按命令执行的先后顺序排列。 当操作被打断时, 返回空值nil。

7.5. 一个带监听的正常事物流程

7.6. 一个带监听的被打断的时候流程

7.6.1. 客户端一

7.6.2. 客户端二

8. discard命令

8.1. discard命令用于取消事务, 放弃执行事务块内的所有命令。

8.2. 如果正在使用watch命令监视某个(或某些)key, 那么取消所有监视, 等同于执行命令unwatch。

8.3. 语法: discard。

8.4. 总是返回OK。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值