从redis到Lua

时间:2015-08-12 21:58:12

标签: python regex lua redis

我正在尝试使用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。我最初的目的是让所有键(及其值)与模式匹配,但我只得到第一个键

1 个答案:

答案 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:*'])