印趣云课堂-网校系统服务商

手机APP

微信公众号

mongodb - Redis Watch Command 云课堂问答

redis 中 关于 watch 命令的介绍:

  WATCH key [key ...] summary: Watch the given keys to determine execution of the MULTI/EXEC block    `观察给定的 keys 来决定 MULTI/EXEC 块是否执行` since: 2.2.0 group: transactions `自己的理解:在 MULTI/EXEC 块执行之前会判断    被 watch 的keys的值是否改变,如果都没改变则执行MULTI/EXEC 块` 

下面的代码实现自增功能

def incr($key) WATCH $key `观察$key的值,如果没有改变就执行下面 MULTI/EXEC 块,来保证逻辑正确性` $value = GET $key if not $value $value = 0 $value = $value + 1   MULTI SET $key $value result = EXEC return result[0] `在 MULT/EXEC块中无法获取某个KEY的返回值,此时可以通过WATCH来实现同样的效果`

如果代码写成这样会有什么后果?

def incr($key) $value = GET $key if not $value $value = 0 $value = $value + 1   return SET $key $value

redis-cli中验证改变Watch key的值, MULTI/EXEC是否执行

127.0.0.1:6379> WATCH key1 OK 127.0.0.1:6379> SET key1 value1 OK 127.0.0.1:6379> MULTI OK 127.0.0.1:6379> SET key2 value2 QUEUED 127.0.0.1:6379> SET key3 value3 QUEUED 127.0.0.1:6379> EXEC (nil) 127.0.0.1:6379> GET key2 (nil) 127.0.0.1:6379> GET key3 (nil) 

既然都看到这里了,期望在下面看到你的见解.

提问者2米六啊

添加回答

1回答
莹
6年前

WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到EXEC,
其实就像一个乐观锁
ps:你想问的问题是啥…………

赞同00个回复

相关问题

相关分类

    请选择你的考试意向可选择1个考试 随时调整

    test

    外语考试

    考研学历

    教师公考

    医药卫生

    职业资格

    财会经济

    建筑工程

    趣味测试

    考研

    IT

    医疗教学

    外语教学

    数理逻辑

    文学

    点击查看更多考试 >

    选好了