Python 通过Lua从redis获取与键模式匹配的所有值

Python 通过Lua从redis获取与键模式匹配的所有值,python,regex,lua,redis,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 """

我正在尝试使用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

首先,我不明白为什么我在最后一次打印报表时没有得到任何结果。我最初的目的是获取与模式匹配的所有键(及其值),但我只获取第一个键

我想我已经找到了我缺少的东西

我应该将键作为初始redis.call的第一个参数传递,然后迭代键以获取值,而不是GET

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

也许需要一个正则表达式。试试
google:.*
这会给我以下错误响应错误:@user\u script:2:Lua redis()命令参数必须是字符串或整数这是正确的答案,但是-使用
键可能是redis最糟糕的做法。在我看来,OP需要重新思考他的方法。看看SCAN,它是为搜索/匹配键而设计的:如果你能演示如何使用SCAN解决他的问题,你会更有用