Redis分布式锁,你用对了吗?
PART1.分布式锁是什么?
具备哪些特性的分布式锁才是一个优秀的分布式锁?牛牛认为要从如下几方面来看:
互斥性:锁的目的是获取资源的使用权,所以只让一个竞争者持有锁,这一点要尽可能保证; 安全性:避免死锁情况发生。当一个竞争者在持有锁期间内,由于意外崩溃而导致未能主动解锁,其持有的锁也能够被正常释放,并保证后续其它竞争者也能加锁; 对称性:同一个锁,加锁和解锁必须是同一个竞争者。不能把其他竞争者持有的锁给释放了,这又称为锁的可重入性。 可靠性:需要有一定程度的异常处理能力、容灾能力。
分布式锁,一般会依托第三方组件来实现,而利用Redis实现则是工作中应用最多的一种。
今天,就让我们从最基础的步骤开始,依照分布式锁的特性,层层递进,步步完善,将它优化到最优,让大家完整地了解如何用Redis来实现一个分布式锁。
最简化版本
支持过期时间
能够支持过期时间,目前这个锁基本上是能用了。
加上owner
引入Lua
容灾考虑
主从容灾
多机部署
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️
评论