Redis锁扩展期限获得新进展(redis 锁续期)
近日,Redis锁的扩展时间被开源社区的积极参与者们改进,被证实可以提供极大的改善。基于Redis的分布式锁是大多数应用程序中常用的业务方法。它允许多个客户端同时解决关于共享资源的控制问题。
此前,Redis锁获得资源的方式是这样的:客户端请求资源后,Redis会创建一个定时任务,当时间到达时,Redis会自动释放该资源,释放之后会触发客户端的请求重新加锁,但是使用这种方式存在一个问题:即,客户端不能更改它所依赖的锁的生存时间,这就可能导致客户端失去对某些共享资源的控制,这也会破坏Redis的一致性。
在最新进展里,开发者增加了新的功能,使用setex命令可以在Redis客户端和服务器之间建立可动态更新的锁。 客户端可以更好地控制资源的生存时间,如果任务执行时间过长而不能在设置的定期时间到来之前完成,则可以使用 setex 命令扩展锁的有效期。
通过这种机制,Redis锁具有了更好的容错性。 由于 Redis 自动续租,再加上客户端可以更新自己获得资源的有效期,可以有效减少资源的短暂性而失去控制的可能性。以下为扩展Redis锁时间的客户端示例代码:
“`javascript
// acquire the lock by setting expirationtime
redis.set(“foo”, “bar”, “EX”, 10);
// increase lock life
redis.expire(“foo”, 20);
总结
从上面的讨论可以看出,近来,Redis锁通过使用setex和expire两个命令,有了新的发展,客户端可以更好的控制 Lock的有效期,不但提高了客户端对共享资源的控制,而且也极大地提高了Redis的容错性。