Redis Redlock算法的实现比普通的单实例实现更安全。
Redlock可供参考的实现库
**Redission** Java语言实现的。
安全和活性失效保障
为什么基于故障转移的实现还不够
单实例实现分布式锁的正确方式
Redlock算法
这个算法是异步的吗?
失效时重试
释放锁
安全争议
活性争议
性能,崩溃恢复和Redis同步
使算法更加可靠:锁的扩展(扩展TTL)
如果业务的工作可以拆分为许多小步骤,可以将有效时间设置的小一些,使用扩展TTL的机制。
在工作进行的过程中,当发现锁剩下的有效时间很短时,可以再次向redis的所有实例发送一个Lua脚本,让key的有效时间延长一点。**前提是**<u>*key存在且value是之前设置的value*</u>
客户端扩展TTL时必须像首次取得锁一样在大多数实例上扩展成功,才算再次取到锁,并且是在有效时间内再次取到锁(算法和获取锁是非常相似的)
扩展锁的过程中仍然需要达到(N/2 + 1)个实例的这个要求,否则活性特性之一就会失效。