雷迪斯。不同键中两个成员之间的距离
Posted
技术标签:
【中文标题】雷迪斯。不同键中两个成员之间的距离【英文标题】:Redis. Distance between two members in different keys 【发布时间】:2018-01-17 04:46:46 【问题描述】:我在 redis 中有两个键(geo zset),第一个是“DRIVERS”,第二个是“ORDERS”,其中的成员。 是否可以计算 DRIVERS 中的成员和 ORDERS 中的成员之间的距离? 手册https://redis.io/commands/geodist说成员之间只能一键实现。
【问题讨论】:
【参考方案1】:没有内置的方法可以做到这一点。不过,您可以尝试以下两种解决方案。
-
使用
GEOPOS
命令获取司机和订单的位置(经度和纬度)。然后你可以自己计算它们之间的距离。或者您可以将结果放入一个新的GEOSET
并让 Redis 进行计算。
将司机和订单保存在同一个GEOSET
,例如GEOADD geo long1 lat1 driver:id
, GEOADD geo long2 lat2 Order:id
【讨论】:
用 Lua 编写解决方案 1 以获得额外的魅力【参考方案2】:由于 GEOSETS 是排序集,您可以通过执行 ZUNIONSTORE 创建临时键,然后对这些键执行操作
【讨论】:
【参考方案3】:GEODIST 将仅在同一 Key 内的地理空间对象之间执行距离计算。但是,地理空间对象的后备存储是一个排序集。使用 ZUNIONSTORE 可以组合这两个集合,并且可以对结果集执行 GEODIST。
> ZUNIONSTORE result 2 DRIVERS ORDERS aggregate min
> GEODIST result "driver_1" "order_1" km
注意:聚合最小值选项是必需的,否则出现在多个 Set 中的任何元素都将对其分数进行聚合。对于地理空间数据,这将导致该点移动其经度和纬度位置。
【讨论】:
以上是关于雷迪斯。不同键中两个成员之间的距离的主要内容,如果未能解决你的问题,请参考以下文章
两个不同 Numpy 数组中的点之间的最小欧几里得距离,不在