https://zhuanlan.zhihu.com/p/442482479
在这篇文章有 有一个点不理解,就下面 在加锁成功的时候 为什么要遍历ZSet中的每一个元素,将他们的score 减少argv[3]
我找到的解释是:
问题一 就是如何理解Zset 中的score zincrby tonumber(ARGV[3])
redis.call('zincrby', KEYS[3], -tonumber(ARGV[3]), keys[i]);
问题2,为什么公平锁的实现要使用ZSet
我的理解就是一个线程来了,要能够计算出这个线程剩余的可等待时间,
如果你只使用一个List,那么我要遍历整个list才能找到这个线程,而zset就不一样呢,zset能够直接拿根据线程id 实现map get。 那么既然想实现 map get,为什么不直接使用map,而使用了zset呢?