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)

浙公网安备 33010602011771号