实现redis锁

一个分布式系统需要一起更新redis,为了防止重复写入,需要实现一个redis的写入保护锁。

用redis的set, nx=true,

NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value

key_value 用一个token,可以用timestamp替代,用来确保自己操作的是本身锁的key。

expire_time 设置一个锁的过期时间

def redis_lock(lock_key, key_value, expire_time):
    return r.set(lock_key, key_value, nx=True, ex=expire_time)


def redis_unlock(lock_key, key_value):
    if r.get(lock_key) is None:
        return
    elif r.get(lock_key).decode("utf8") == str(key_value):
        return r.delete(lock_key)
    else:
        return

使用例子

lock_time = time.time()
if rh.redis_lock(_key, lock_time, 2):
    # do something
    rh.redis_unlock(_key, lock_time)

 

posted @ 2017-11-16 15:22  hyfwin  阅读(153)  评论(0编辑  收藏  举报