前言
介绍:使用Redis作为分布式锁的一些注意点 - 小勇DW3 - 博客园 (cnblogs.com)
安装包:pip install redis
代码
import redis
import time
def 分布式锁_加锁(redis, 锁名, 加锁人, 超时时间_秒=30):
rst = redis.set(name=锁名, value=加锁人, nx=True, ex=超时时间_秒)
return rst
def 分布式锁_解锁(redis, 锁名, 加锁人):
lua = f"""
if redis.call('get', KEYS[1]) == ARGV[1] then
return redis.call('del', KEYS[1])
else
return 0
end
"""
cmd = redis.register_script(lua)
rst = cmd(keys=[锁名], args=[加锁人])
return rst
锁名 = "分布式锁:a1"
加锁人 = "hlmio"
超时时间_秒 = 60
r = redis.StrictRedis(host="127.0.0.1", port=6375, password="redis", db=0, decode_responses=True, charset="utf-8")
while True:
if 分布式锁_加锁(r,锁名,加锁人,超时时间_秒):
print("成功加锁")
break
else:
print("加锁失败")
time.sleep(5)
continue
time.sleep(10) // 代表业务逻辑
if 分布式锁_解锁(r, 锁名, 加锁人):
print("ok解锁")
else:
print("解锁err")
print("打印这句,有两种可能")
print("1.业务逻辑超时")
print("2.此分布锁代码有问题")