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
Redis排序集ZSCAN与临时集-一个好主意?_Redis_Sortedset - Fatal编程技术网

Redis排序集ZSCAN与临时集-一个好主意?

Redis排序集ZSCAN与临时集-一个好主意?,redis,sortedset,Redis,Sortedset,用例非常简单 假设我有一个名为Employee的zSet,其值如下 zAdd Employee 1000 "Eric Anderson" zAdd Employee 1200 "Eric Henderson" zAdd Employee 1400 "Eric Johnson" zAdd Employee 1500 "Jackie Johnson" zAdd Employee 1600 "John Ericson" 因此,基本上,如果我想让系统的用户使用通配符搜索员工,显示按分数从高到低排序的结

用例非常简单

假设我有一个名为Employee的zSet,其值如下

zAdd Employee 1000 "Eric Anderson"
zAdd Employee 1200 "Eric Henderson"
zAdd Employee 1400 "Eric Johnson"
zAdd Employee 1500 "Jackie Johnson"
zAdd Employee 1600 "John Ericson"
因此,基本上,如果我想让系统的用户使用通配符搜索员工,显示按分数从高到低排序的结果,我能用ZSCAN解决这个问题吗

我想做的是这样的事情

ZSCAN Employee MATCH "*ohn*" LIMIT 0, 20
然后得到这样的结果集

John Ericson, 1600
Jackie Johnson, 1500
Eric Johnson, 1400
留下另外两个,因为它们与搜索短语ohn不匹配

换句话说,这是基本的搜索功能。一个你可以比拟的

SELECT * FROM Employee WHERE name LIKE "%ohn%" ORDER BY salary
显然,在上面的选择中,薪资是分数值。显然不建议使用LIKE和%%进行上述查询,因为它不会使用索引,因此会进行文件排序

请给我一些建议


编辑:我忘了添加一个建议的解决方案,在这个解决方案中,您可以执行一个常规的ZSCAN,获取与搜索短语匹配的所有值,无论顺序如何,然后将这些值放在一个新的zSET中,并在其上执行一个zREVRANGE,以获取结果,然后删除该zSET。这就是我所能想到的,它确实会起作用,但它明智吗?

你明白了吗?我在寻找一些相似的东西,我必须坦白承认我不记得了,因为我问这个问题已经有一段时间了。我真的很抱歉。