我需要按62-125范围内的前缀获取所有键,后跟':'
我尝试运行以下命令没有成功:
res = r.keys('[62-125]:*')
还尝试使用扫描:
iter = r.scan_iter('^(6[2-9]|7[0-9]):*')
res = []
for key in iter:
res.append(key)
这甚至可能吗?如果是,怎么办?
一些例子,如果不清楚:
应检索的密钥:
62:kk:345345345
72:hg:76576
88:fg:67886
122:hg:8678
124:gg:8678
不应检索的密钥:
0:df:09765
20:gg:6565
38:hh:345
44:bb:3454
61:bb:6568
我的数据库中的所有键都以数字前缀开头,如果有关系,则后跟':'。
答案 0 :(得分:1)
Redis的模式(用于KEYS
和SCAN
)类似于glob,因此尝试对它们使用正则表达式是不可行的。
您可以使用执行完整的SCAN
并过滤结果的服务器端Lua脚本(Lua具有更强大的模式匹配功能,尽管不是POSIX regex)。
答案 1 :(得分:0)
可行的解决方案:
RES = []
_res = r.keys('6[2-9]:*')
RES.append(_res)
for i in range(7,13):
_res = r.keys('{}[0-9]:*'.format(i))
RES.append(_res)
这可行,但是我不接受这个答案。
如果可能的话,我将投票反对自己的解决方案。请提出一个更好的建议。
答案 2 :(得分:0)
我建议您使用REDIS PIPELINE
喜欢这个...
Pipeline pipelined = jedis.pipelined();
for(keys : 62-125){
pipelined.keys("keys*");
}
pipelined.sync();
for(Reponse response : responses){
Object o = response.get(); //Here you get the list of keys
}
您不能使用KEYS
和SCAN
来获取多个匹配模式的键。有关更多information的信息请参见