问题是关于这些 Redis 命令以及如何在单个调用中使用 3° 和 4°。
1)
HMSET key field value [field value ...]
2)
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
3)
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
4)
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
我有数千个 x y z 坐标的点:p1,p2,p3,p4,p5,p6,p7...
HMSET p_1 x 10 y 20 z 30
HMSET p_2 x 20 y 30 z 40
HMSET p_3 x 30 y 40 z 50
...
...
我有三个排序集:xsorted、ysorted、zsorted
zadd xsorted 10 p_1
zadd xsorted 20 p_2
zadd xsorted 30 p_3
...
(所有x作为分数和点的键p_1,p_2,p_3...作为成员
zadd ysorted 20 p_1
zadd ysorted 30 p_2
zadd ysorted 40 p_3
....
(所有y作为分数和点的键p_1,p_2,p_3 ...作为成员
zadd zsorted 30 p_1
zadd zsorted 40 p_2
zadd zsorted 50 p_3
...
(所有 z 作为分数和点的键 p_1,p_2,p_3...作为成员
作为 ZRANGEBYSCORE 的结果,我有 range_x、range_y、range_z 客户端:
range_x = ZRANGEBYSCORE xsorted min max
range_y = ZRANGEBYSCORE ysorted min max
range_z = ZRANGEBYSCORE zsorted min max
由于 ZINTERSTORE,我有 xyzinter 客户端:
ZINTERSTORE xyzinter 3 range_x range_y range_z
所以 xyzinter 具有 x,y,z 坐标值范围内的点的键。很好,我需要它。
是否有可能以更快的方式仅通过“两次”调用来执行上述命令?
类似于:
1)
ZINTERSTORE xyzinter 3
ZRANGEBYSCORE xsorted min max
ZRANGEBYSCORE ysorted min max
ZRANGEBYSCORE zsorted min max
2)
ZRANGE xyzinter start stop
提前致谢 马里奥
最佳答案
不,您必须同时调用这两个命令。但是,您可以将它们包装在将在服务器端运行的 Lua 脚本中,然后您的客户端将对 Redis 进行一次调用。在 https://redis.io/commands/eval 阅读更多关于 Redis 中的 Lua 脚本的信息
关于单个命令调用中多个 ZRANGEBYSCORE 的 Redis ZINTERSTORE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56590067/