Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis可以进行前缀匹配吗?_Redis - Fatal编程技术网

Redis可以进行前缀匹配吗?

Redis可以进行前缀匹配吗?,redis,Redis,假设我在世界上有一组这样的城市: EUKLOND EUKMANC EUKEDIN EITROME EITMILA EITNAPE EFRPARI EFRAVIG EFRBRES 第一个字母是大陆,第二个字母是国家,后面的4个字母是缩写的城市名称 我希望能够通过传递“E”来搜索此集合,它将返回所有条目或EIT,检索意大利或EFRPARI的所有条目,并仅获取巴黎条目 这是我可以用Redis做的吗?一般来说,这是一个自动完成的场景 Redis的作者,写了一篇关于如何做到这一点的文章 更新:我刚刚看到

假设我在世界上有一组这样的城市:

EUKLOND
EUKMANC
EUKEDIN
EITROME
EITMILA
EITNAPE
EFRPARI
EFRAVIG
EFRBRES
第一个字母是大陆,第二个字母是国家,后面的4个字母是缩写的城市名称

我希望能够通过传递“E”来搜索此集合,它将返回所有条目或EIT,检索意大利或EFRPARI的所有条目,并仅获取巴黎条目


这是我可以用Redis做的吗?

一般来说,这是一个自动完成的场景

Redis的作者,写了一篇关于如何做到这一点的文章


更新:我刚刚看到了另一个很棒的解决方案,第一个采用了Salvatore的解决方案并以清晰的方式进行了解释,第二个提供了另一个解决方案,该解决方案也适用于多词短语。

谢谢Ofer,我已经阅读了这篇文章,但我似乎无法理解作者是如何得出结论的:“zrange zset 6-1”。他怎么知道他需要做6-1分?如果我在一个欧洲国家有不同数量的城市,那么如何在“zrange zset X-1”中计算X?首先,他通过运行
zrank zset fo
查询
fo
位于何处。他得到了答案。然后,他查询从6(5+1)到结束的所有项目。他运行
zrange zset 6-1
。当你使用负数时,它的意思是“从头到尾”-1表示“排序集的最后一个元素”(参见)。是的,这是我假设的。从“fo”到“列表末尾”对我来说不是一个可行的方法。上面的数据集只是一个例子。我真的负担不起从某个任意点一直返回到场景结束,因为这可能是一个巨大的数据量(场景可以容纳约40亿项IRC)。安特里兹在他的帖子后面谈到了这一点:“幸运的是,流算法可以帮助我们。我们知道,从统计上来说,即使每个前缀只包含300个项目,我们也能够很好地接近前五个项目,因为如果一个查询足够频繁,它最终将战胜其他查询。“您应该以不同于关系数据库或专用搜索服务器的方式来考虑Redis。它的速度非常快,你必须意识到重复查询是绝对可以的——它仍然比其他任何事情都快。例如,在Redis中,每次重复获取50个块,直到发现超出范围为止,这是完全可以的。我花了一些时间来摆脱“经典”的习惯和想法。