rddis分布式锁

https://www.dandelioncloud.cn/article/details/1564643129133592577

https://www.zhihu.com/question/581407349/answer/2868553557?utm_id=0

import redis
import time

r = redis.Redis(host='xxxxxx.aliyuncs.com', port=6379, db=0,password='xxxxx')

def acquire_lock(conn, lock_name, acquire_timeout=10):
    print("加锁")
    identifier = str("APselery")
    lock_name = f"lock:{lock_name}"
    lock_timeout = int(acquire_timeout + time.time())
    if conn.setnx(lock_name, identifier):   #存在键就写入失败
        conn.expire(lock_name, acquire_timeout)
        print("加锁-成功")
        return identifier
    else:
        print("加锁-失败")
    return False

def release_lock(conn, lock_name, identifier):
    print("解锁")
    lock_name = f"lock:{lock_name}"
    pipe = conn.pipeline(True)
    lock_watch = f"{lock_name}.{identifier}"
    pipe.watch(lock_watch)
    if conn.get(lock_name) == identifier:
        pipe.multi()
        pipe.delete(lock_name)
        pipe.execute()
    pipe.unwatch()

identifier = acquire_lock(r, 'test')
if identifier:
    # critical section
    release_lock(r, 'test', identifier)

 

posted @ 2023-03-11 16:36  凯宾斯基  阅读(32)  评论(0)    收藏  举报