我需要通过62-125范围内的前缀和后跟':‘来获取所有的键。
Iv'e尝试运行以下命令,但没有成功:
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我的数据库中的所有键都以数字前缀开头,后跟':‘,如果有关系的话。
发布于 2019-12-03 22:03:11
Redis的模式(用于KEYS和SCAN)类似于glob,所以尝试在它们上使用正则表达式是不可能的。
您可以使用服务器端Lua脚本( Lua具有更健壮的模式匹配功能,但不是POSIX正则表达式)来执行完整的SCAN并过滤结果。
发布于 2019-12-03 21:07:00
一个可行的解决方案:
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)这是可行的,但我不接受这个答案。
这很恶心,让我讨厌
如果可能的话,我会投票反对我自己的解决方案。请推荐一个更好的。
发布于 2019-12-03 21:22:43
我建议您使用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来获取多个匹配的密钥,这是pattern.Refer more information
https://stackoverflow.com/questions/59157474
复制相似问题