键和mget不是原子的?

时间:2016-11-01 03:40:08

标签: python redis atomic

我有一个案例:

# a = r.keys("test_*") ; a 
{'test_1': '1', 'test_2': '2'}
# b = r.mget(a) ; b
['1', ''2]

test_1mget可能会超时。那么我怎样才能使keysmget成为原子步骤

 dict(zip(keys, r.mget(keys))
总是得到我想要的东西?

1 个答案:

答案 0 :(得分:2)

为了使这两个命令以原子方式运行,您可以使用lua脚本。

--atomic.lua
local keys = redis.call('keys', '*')
local result = {}
for idx, key in ipairs(keys) do
    table.insert(result, key)   -- insert key
    table.insert(result, redis.call('get', key))    -- insert value
end
return result

但是,使用KEYS命令几乎总是一个坏主意,因为它可能会长时间阻止Redis。