关于 redis的watch

> set key 0

OK

> 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 都会出错了.

来张图
5-1ZH4122J5538.png

事务执行结束就会取消监控, 每次执行事务,都要去执行一次 watch,这个不难理解吧. 你为啥会想着执行一次 watch 后跑多个事务呢?

以上是 关于 redis的watch 的全部内容, 来源链接: utcz.com/a/36257.html

回到顶部