Redis Watch机制实现分布式乐观锁

Redis中使用 watch 命令可以决定事务最终是执行还是回滚。通常情况下,会在multi命令之前使用 watch 命令监控某些键值对,然后使用 multi 命令开启事务,执行各种对数据结构进行操作的命令,这个时候这些命令并不会立刻执行,而是进入队列等待后续执行的操作。
​ 当 Redis 使用 exec命令执行事务的时候,它首先会去比对被 watch 命令所监控的键值对,如果没有发生变化,那么它会执行事务队列中的命令,提交事务;如果发生变化,那么它不会执行任何事务中的命令,而去事务回滚。无论事务是否回滚,Redis 都会去取消执行事务前的 watch 命令,这个过程如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z6AWQ5ci-1661936898782)(D:\developsoftware\mayun\note\study-note\java\middleware\image\image-20220831144828414.png)]

​ Redis使用Watch机制实现乐观锁是基于CAS(Compare And Swap)思想(比较并替换),是不具有互斥性,不会产生锁等待而消耗资源,但是需要反复的重试,但也是因为重试的机制,能比较快的响应。因此我们可以利用redis来实现乐观锁。具体思路如下:

猜你喜欢

转载自blog.csdn.net/qq_36305027/article/details/126627873