我有两个排序集,并且想要进行交集,即。 (age BETWEEN 25, 35) AND (salary BETWEEN 250, 350)
(age BETWEEN 25, 35) AND (salary BETWEEN 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
您应该先ZSET使用ZCARD检查哪些元素较少,然后克隆并修剪较短的元素。
ZSET
其次,您将剩下2个剩菜。您可以重复使用同一辅助程序ZSET,以加快清除速度。
我还想建议克隆使用DUMP和RESTORE,但是对于排序集的情况,ZUNIONSTORE实际上要快得多。这是一个100万个元素集的时间安排:
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"