问答

关于 redis的watch

作者:admin 2021-06-14 我要评论

set key 0OK watch keyOK incrby key 5(integer) 5 get key"5" multiOK incrby key 5QUEUED exec(nil) multiOK incrby key 5QUEUED exec1) (integer) 10 get key...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
> 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 后跑多个事务呢?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 关于 redis的watch

    关于 redis的watch

  • react echarts地图 formatter怎么添加

    react echarts地图 formatter怎么添加

  • husky uninstalling Git hooks done

    husky uninstalling Git hooks done

  • react-native-webview无法正确加载本地

    react-native-webview无法正确加载本地

腾讯云代理商
海外云服务器