关于 redis的watch
> set key 0OK
> watch key
OK
> incrby key 5
(integer) 5
> get key
"5"
> multi
OK
> incrby key 5
QUEUED
> exec
(nil)
> multi
OK
> incrby key 5
QUEUED
> exec
1) (integer) 10
> get key
"10"
发现 watch 只能阻止最近的一次事务。这让我瞬间懵了。
如果在并发的情况下,同一个事务代码被执行了多次。watch 只能阻止第一次吗??
那 watch 的应用场景在哪里?
回答
watch 属于 CAS 的机制,并发情况下,watch 的时候,大家的链接都记住了这个 key 的状态,然后大家都开始 multi 开启事务,大家都愉快的修改了这个值,修改完后,大家发出 exec 命令,大家都要去提交事务, 这个时候,每个链接要去比较这个时候的 key 的状态和 watch 的时候是不是一样,如果是一样,就提交事务,并取消 watch,不一样,就报错,不执行事务,但是由于 redis 一次只能执行一个操作,所以,大家的 exec 都是排队的执行的,第一个exec 执行之后,key的状态发生了变化,后面的exec 都会出错了.
来张图
事务执行结束就会取消监控, 每次执行事务,都要去执行一次 watch,这个不难理解吧. 你为啥会想着执行一次 watch 后跑多个事务呢?
以上是 关于 redis的watch 的全部内容, 来源链接: utcz.com/a/36257.html