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)
既然都看到这里了,期望在下面看到你的见解.
添加回答