Replies: 3 comments 9 replies
-
其实就是 CAS / CAD,这个一直都有提过,只是社区现在一直没有推这个,理由是:
不过我感觉这个在 7.2 可能可以加进去,因为很多 member 都想加包括我(不确定 core-team 的规划,要看后面 7.2 的规划,找机会我也去问问) |
Beta Was this translation helpful? Give feedback.
-
RedissonReadLock链接
|
Beta Was this translation helpful? Give feedback.
-
要造的话当然是都可以,不过我自己想法是,本身做 lock 速度就是要快,我印象中大家一般都用单节点用来做 lock,就不会说特意为一个 lock 做主从/集群啥的 》 好像没有获取从节点数量的命令吗 |
Beta Was this translation helpful? Give feedback.
-
在 Redis 实现分布式锁时突然想到这个比较典型的问题:
首先用 Redis 做分布式锁的话,value 可以设置为每个客户端的id(client_id),如果出现了意外情况,即拿到锁后执行的机子卡住了,没有给锁续命导致key超时了,之后锁被第二个 cilent 拿到。那么接下来就可能会导致第一个 client 接着执行完之后,把第二个 cilent 设置的key 删掉,接连下去可能导致锁一直失效了。所以我们删除 key 的时候要判断 key 的 value 是否等于自身的 client_id,比如:
那么这个还是会有个问题,就是 if 判断正确之后又卡住了导致锁超时,那么接下来这个进程会把别的进程设置的 key 又删除了。所以这段代码需要保证原子性,可以使用lua脚本来完成。
虽然确实是可以使用lua脚本来完成,像 set 没有扩展参数时也是这么做的,但是之后还是把这些能用lua脚本完成的事放到了 set 的扩展参数里来更方便使用,所以我在想是否也可以给 del 提供扩展参数呢?🙃 或者我认为可以多加一些del命令,比如
delValueIs [key] [value]
@enjoy-binbin 你印象里有人曾提出这个事情吗?
Beta Was this translation helpful? Give feedback.
All reactions