我想在更新时锁定特定密钥。尝试了下面的示例代码。
import redis
import time
conn = redis.StrictRedis(host='localhost', port=6379, db=0)
print ("previous Connected Key value is :" + conn.get('connected'))
print ("previous Operational Key value is :" + conn.get('operational'))
have_lock = False
my_lock = redis.Redis().lock("my_key")
try:
have_lock = my_lock.acquire(blocking=False)
#have_lock = my_lock.acquire(timeout=5)
if have_lock:
print("Got lock. Doing some stuff...")
time.sleep(15)
conn.set('connected', 'false')
conn.set('operational', 'false')
else:
print("Did not acquire lock.")
finally:
if have_lock:
my_lock.release()
print ("After Connected Key value is :" + conn.get('connected'))
print ('After Operational Key value is :' + conn.get('operational'))
上面的代码正在获取锁,但我仍然可以从redis-cli或其他应用程序访问KEY。
如何锁定KEY?
答案 0 :(得分:3)
根据设计,Redis密钥在更新期间被锁定,您不需要锁定它们。 实际上,Redis uses a single thread to process commands,所以每个操作都是原子的。在处理给定命令期间,其他客户端被阻止,这就是为什么您不能执行具有较长执行时间的查询(例如,您自己编写并使用eval执行的Lua脚本;或者{ {3}})。