我们通过Redis的自动过期特性为锁设置一个最大加锁时限,这样即便是锁的持有者由于故障下线,锁也会在时限到达之后自动释放。
VALUE_OF_LOCK=“locking”
class TimingLock:
def __init__(self,client,key):
self.client=client
self.key=key
def accquire(self,timeout)
"""
尝试获取一个带有秒级最大使用时限的锁,
成功时返回True,失败时返回False.
"""
result=self.client.set(self.key,VALUE_OF_LOCK,ex=timeout,nx=True)
return result is not None
def release(self):
"""
尝试释放锁,成功返回True,失败时返回False.
"""
return self.client.delete(self.key) ==1