单个命令调用中多个 ZRANGEBYSCORE 的 Redis ZINTERSTORE?

标签 redis

问题是关于这些 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/

相关文章:

redis - Redis 中 AOF 和 RDB 的首字母缩写词代表什么?

c++ - 在windows平台下,比如xp,win7,有没有redis的好用的C++客户端?

Redis 预 GET 事件

.net - Net的Redis客户端缓存

redis - redis日志中的 "quorum reached"是什么意思?从技术上讲这意味着什么?

ruby - 如何使用 rails server 启动 resque 守护进程?

node.js - NodeJS Expres + RedisStore ,请求 session 始终未定义

python-3.x - Tornado + aioredis : why are my redis calls blocking?

c# - 端点 x.x.x.x :port serving hashslot nnnn is not reachable at this point of time

Redis 读/写