RedisLock

class deepfos.lib.redis.RedisLock(key, redis_client=None, renew_interval=5, expire_sec=10, raises=None, blocking_timeout=0)

通过Redis实现的锁对象

参数
  • redis_client (Optional[Redis]) – Redis对象

  • key (str) – 锁名

  • renew_interval (int) – 刷新有效时间间隔,默认为5秒

  • expire_sec (int) – 有效时间,默认为10秒,需大于刷新间隔,否则刷新无效

  • raises (Optional[Exception]) – 获取锁失败时抛出的错误,仅使用with时有效

  • blocking_timeout (Optional[int]) – 获取锁的等待时间,默认为0,即不等待,为None时等待至获取到为止

提示

使用 with 获取锁时,如果获取失败,将直接报错。 使用 aquire 获取时,将返回 bool 类型,表示是否获取成功。

示例

with RedisLock('locked_key_a'):
    do_something()

lock = RedisLock('locked_key_b')
if lock.aquire():
    try:
        do_something()
    finally:
        lock.release()
acquire(timeout=0)

获取当前锁

参数

timeout – 获取等待时间,默认为0,即不等待,为None时一直等待至得到锁

返回类型

bool

locked()

key是否被某个锁拥有

owned()

key是否被当前锁拥有

release()

释放当前锁