我有两个排序集,想要交集,即。 (年龄在 25、35 之间)和(工资在 250、350 之间)
关于效率有没有比以下更好的方法:
ZUNIONSTORE t_age 1 age WEIGHTS 1
ZREMRANGEBYSCORE t_age -inf (25
ZREMRANGEBYSCORE t_age (35 +inf
ZINTERSTORE result 2 salary t_age WEIGHTS 1 0
ZRANGEBYSCORE result 250 350
最佳答案
你应该先用ZCARD检查哪个ZSET
的元素少, 并克隆和修剪较短的那个。
其次,您将留下 2 个剩菜。您可以重复使用相同的辅助 ZSET
来进行更快的清理。
我也想建议DUMP和 RESTORE对于克隆,但对于排序集的情况,ZUNIONSTORE 实际上要快得多。 以下是 1M 元素集的时间安排:
1) 1) (integer) 14
2) (integer) 1444165498
3) (integer) 936762
4) Complexity info: N:1000000,M:1000000
5) 1) "ZUNIONSTORE"
2) "temp3"
3) "1"
4) "temp1"
5) "WEIGHTS"
6) "1"
2) 1) (integer) 13
2) (integer) 1444165421
3) (integer) 3166360
4)
5) 1) "evalsha"
2) "48286113cfe4b389d516e98646e5f4e086decc34"
3) "2"
4) "temp1"
5) "temp2"
6) "0"
关于redis - 两个或多个排序集的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911604/