我有两个有序的集合,并且想要交叉,即. (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
Run Code Online (Sandbox Code Playgroud)
您应该首先使用ZCARDZSET检查哪个元素较少,然后克隆并修剪较短的元素。
其次,你留下了 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"
Run Code Online (Sandbox Code Playgroud)