Redis WATCH事务监视机制与回滚

笔者Redis事务相关文章链接:Redis 事务机制深入浅出

概述

Redis内置了WATCH命令,使用WATCH命令可以实现乐观锁的功能,在事务被EXEC命令执行前,如果此前被WATCH监视的某数据库键已经被修改过,则拒绝执行当前事务,返回空并重置客户端事务标识。在并发场景下易使用该命令,很容易理解,有并发的场景就有同步处理。

WATCH的使用

首先明确一点,底层实现中每个Redis客户端内都有一个用于标识事务状态的属性,在每一条命令送到服务器端时,在执行前都会先检查该属性,因为同一条命令在事务状态和非事务状态下应该有不同的处理方法。

WATCH的使用时机

WATCH只能在事务未开启的状态下使用,命令执行前会先对客户端下的事务状态属性做检查,如果发现事务已经开启,则返回错误。此处也可以理解为不应允许WATCH命令进入事务的命令队列。

演示如下;

127.0.0.1:6379> multi
OK
127.0.0.1:6379> watch a
(error) ERR WATCH inside MULTI is not allowed

使用WATCH监视数据库键

该命令语法如下watch key [key ...],语法中可以看出,Redis允许同时监视多个数据库键,当被监视任一数据库键被修改后,EXEC后事务返回nil且不会实际执行。

正常使用演示如下,演示内将两个客户端的操作做串行化处理演示:

// 客户端1
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> set b 1
OK
127.0.0.1:6379> watch a
OK
127.0.0.1:6379> multi
OK

// 客户端2
127.0.0.1:6379> set a 2
OK

//客户端1
127.0.0.1:6379> incr b
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> mget a b
1) "2"
2) "1"
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7rulyL1ar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值