博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《redis in action》Redis锁超时和重入锁
阅读量:4210 次
发布时间:2019-05-26

本文共 471 字,大约阅读时间需要 1 分钟。

之前说redis做分布式锁有个重要的问题就是事故导致锁没有被释放的问题,当时引入了锁超时的想法,意思是这个锁有一定的时间限制。超过这个时间那么锁就自动释放了。考虑到redis提供expire得特性,因此我们获取一个具有超时特性的锁的代码就变成这样。

当然这里的锁超时时间就变成了一个经验值。这是有问题的,除此之外有没有另外一种机制可以做分布式锁?答案肯定是有的。我们在学习zset的时候说zset具有排序的特性。那么我们就可以将锁保留在zset中,根据其时间进行排序,我们总是在获取锁的时候先删除超时时间之前的锁,从而保证保留于zset中的锁都是可用的。我们删除锁就是凭借其加锁的时间去做的,因为在一定时间内锁是可以保留在zset中的,因此使用zset做分布式锁具有多次获取锁的特性,这相对于之前的锁具有更大的优势。这里作者还是截一下书中python的伪代码。大概如下:

当然释放锁也是很简单,直接删除zset中的元素即可:

        那么问题是使用zset效率好还是使用expire效率好?显然是zset呀!

OK,就到这里了,下班了,听歌儿晚安吧!

转载地址:http://bzumi.baihongyu.com/

你可能感兴趣的文章
Linux DebugFS 子目录也是用debugfs_create_dir来实现
查看>>
关于sd卡中一些概念的理解
查看>>
SD卡图形介绍
查看>>
linux MISC 驱动模型分析
查看>>
马达 vibrator的android的timed_output实现方式
查看>>
linux kernel panic解决思路
查看>>
定位Oops的具体代码行分析死机日志的方法
查看>>
Linux kernel oops panic 调试技巧
查看>>
sd是否在位检查
查看>>
关于USB Gadget开发
查看>>
tofel词汇
查看>>
jellybean的suspend策略变动
查看>>
Android linux的休眠和唤醒
查看>>
高通msm8x60 boot(lk)的usb处理解析流程
查看>>
MSM8260 EHCI-MSM72k主控制器的状态机迁移分析
查看>>
MSM8x60 OTG之设备控制器流程分析
查看>>
MSM8X60 USB控制器流程分析
查看>>
sd卡驱动分析之card
查看>>
sd卡驱动分析之core
查看>>
sd卡驱动分析之host
查看>>