《redis in action》Redis锁超时和重入锁写点笔记共 638字,需浏览 2分钟 ·2021-04-22 22:39 之前说redis做分布式锁有个重要的问题就是事故导致锁没有被释放的问题,当时引入了锁超时的想法,意思是这个锁有一定的时间限制。超过这个时间那么锁就自动释放了。考虑到redis提供expire得特性,因此我们获取一个具有超时特性的锁的代码就变成这样。当然这里的锁超时时间就变成了一个经验值。这是有问题的,除此之外有没有另外一种机制可以做分布式锁?答案肯定是有的。我们在学习zset的时候说zset具有排序的特性。那么我们就可以将锁保留在zset中,根据其时间进行排序,我们总是在获取锁的时候先删除超时时间之前的锁,从而保证保留于zset中的锁都是可用的。我们删除锁就是凭借其加锁的时间去做的,因为在一定时间内锁是可以保留在zset中的,因此使用zset做分布式锁具有多次获取锁的特性,这相对于之前的锁具有更大的优势。这里作者还是截一下书中python的伪代码。大概如下:当然释放锁也是很简单,直接删除zset中的元素即可: 那么问题是使用zset效率好还是使用expire效率好?显然是zset呀!OK,就到这里了,下班了,听歌儿晚安吧! 浏览 23点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 Java 重入锁和读写锁Java资料站0【110期】面试官:Redis分布式锁如何解决锁超时问题?程序员的成长之路0细说Redis分布式锁公众号程序猿DD0细说Redis分布式锁程序员面试吧0聊聊 Redis 分布式锁0. 前言 Redis 是日常开发中经常使用到的中间件,以优秀的性能著称。但是 Redis 分布式锁可以说是饱受争议,很多人认为 Redis 并不适合作为分布式锁。它确实存在着一些问题,今天我准备聊一聊 Redis 分布式锁如何实...TavenYin0Redis实现分布式锁程序媛和她的猫0细说Redis分布式锁每天晒白牙0细说Redis分布式锁程序员考拉0Redis分布式锁深入探究Java3y0Redis实战篇:Redis分布式锁无死角分析码哥字节0点赞 评论 收藏 分享 手机扫一扫分享分享 举报