用Redis实现分布式锁

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

Redlock可供参考的实现库

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

安全和活性失效保障

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

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

Redlock算法

这个算法是异步的吗?

失效时重试

释放锁

安全争议

活性争议

性能,崩溃恢复和Redis同步

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

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

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

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

扩展锁的过程中仍然需要达到(N/2 + 1)个实例的这个要求,否则活性特性之一就会失效。

你可能感兴趣的:(用Redis实现分布式锁)