python - keys 和 mget 不是原子的?

标签 python redis atomic

我有一个案例:

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

但是test_1可能会在mget时超时。那么我怎样才能使 keysmget 作为原子步骤来制作

 dict(zip(keys, r.mget(keys))

总能得到我想要的?

最佳答案

为了让这两个命令原子运行,可以使用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。

关于python - keys 和 mget 不是原子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353827/

相关文章:

Python文件下载

python - 在文件中查找彼此相反的单词

python - 在python中随机化字典

ruby-on-rails - 如何在 rails 中处理 redis pub/sub

python - 使用正则表达式按字符拆分

node.js - 多个 NodeJS 服务器的多个 redis 实例

redis - 从 Redis 哈希中获取最佳结果

go - 如何在 Go 中实现只使用 atomic 的 "i++ and i>=max ? 0: i"

design-patterns - "atomicity"一系列操作如何实现? (不一定与多线程相关)

c++ - 无法将 'tbb/atomic.h' 与 Intel 编译器一起使用