雷迪斯。不同键中两个成员之间的距离

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 数组中的点之间的最小欧几里得距离,不在

计算两个纬度和经度坐标之间的距离

这两个或多个点之间的最长距离

如何在不同的数据帧中选择特定时间段内的点,然后根据纬度/经度选择这两个点之间的距离

在 Anylogic 中定义不同区域之间的距离

461-汉明距离