Redission使用List和ZSet实现公平锁的疑惑点,两个为什么?

https://zhuanlan.zhihu.com/p/442482479
在这篇文章有 有一个点不理解,就下面 在加锁成功的时候 为什么要遍历ZSet中的每一个元素,将他们的score 减少argv[3]

image.png

我找到的解释是:
image.png

问题一 就是如何理解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呢?

阅读 727
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题