用Redis实现分布式锁

Redis Redlock算法的实现比普通的单实例实现更安全

Redlock可供参考的实现库

**Redission** Java语言实现的。

安全和活性失效保障

为什么基于故障转移的实现还不够

单实例实现分布式锁的正确方式

Redlock算法

这个算法是异步的吗?

失效时重试

释放锁

安全争议

活性争议

性能,崩溃恢复和Redis同步

使算法更加可靠:锁的扩展(扩展TTL)

如果业务的工作可以拆分为许多小步骤,可以将有效时间设置的小一些,使用扩展TTL的机制。

在工作进行的过程中,当发现锁剩下的有效时间很短时,可以再次向redis的所有实例发送一个Lua脚本,让key的有效时间延长一点。**前提是**<u>*key存在且value是之前设置的value*</u>

客户端扩展TTL时必须像首次取得锁一样在大多数实例上扩展成功,才算再次取到锁,并且是在有效时间内再次取到锁(算法和获取锁是非常相似的)

扩展锁的过程中仍然需要达到(N/2 + 1)个实例的这个要求,否则活性特性之一就会失效。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容