Redis锁定KEY

时间:2016-09-28 05:31:14

标签: redis

我想在更新时锁定特定密钥。尝试了下面的示例代码。

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?

1 个答案:

答案 0 :(得分:3)

根据设计,Redis密钥在更新期间被锁定,您不需要锁定它们。 实际上,Redis uses a single thread to process commands,所以每个操作都是原子的。在处理给定命令期间,其他客户端被阻止,这就是为什么您不能执行具有较长执行时间的查询(例如,您自己编写并使用eval执行的Lua脚本;或者{ {3}})。