我正在尝试使用py-redis和lua找到匹配特定模式的所有键及其值,这是我的代码
rc = redis.Redis(..)
rc.set('google:',100)
rc.set('google:3',200)
rc.set('google:2',3400)
rc.set('google',200)
rc.set('fb',300)
get_script = """
local value = redis.call('GET', KEYS[1])
return value
"""
get_values = rc.register_script(get_script)
print get_values(rc.keys(pattern='google:*'))
print get_values(keys=['google:'])
print get_values(keys=['google:*'])
我得到的输出是
100
100
None
首先,我不明白为什么我在最后一个打印声明中得到None。我最初的目的是让所有键(及其值)与模式匹配,但我只得到第一个键
答案 0 :(得分:1)
我认为我找到了我所缺少的东西
而不是GET我应该将KEYS作为初始redis.call的第一个参数传递,然后遍历键以获取值
get_script = """
local keys = (redis.call('keys', ARGV[1]))
local values={}
for i,key in ipairs(keys) do
local val = redis.call('GET', key)
values[i]=val
i=i+1
end
return values
"""
get_values = rc.register_script(get_script)
print get_values(args=['google:*'])