关于 redis的watch

发布于 2022-09-12 03:55:20 字数 360 浏览 16 评论 0

> 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 的应用场景在哪里?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

咋地 2022-09-19 03:55:20

watch 属于 CAS 的机制,并发情况下,watch 的时候,大家的链接都记住了这个 key 的状态,然后大家都开始 multi 开启事务,大家都愉快的修改了这个值,修改完后,大家发出 exec 命令,大家都要去提交事务, 这个时候,每个链接要去比较这个时候的 key 的状态和 watch 的时候是不是一样,如果是一样,就提交事务,并取消 watch,不一样,就报错,不执行事务,但是由于 redis 一次只能执行一个操作,所以,大家的 exec 都是排队的执行的,第一个exec 执行之后,key的状态发生了变化,后面的exec 都会出错了.

来张图
5-1ZH4122J5538.png

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文