Redis。不同键中两个成员之间的距离

Redis. Distance between two members in different keys

我在 redis 第一个 "DRIVERS" 第二个 "ORDERS" 中有两个键 (geo zset) 和其中的成员。 是否可以计算 DRIVERS 中的成员与 ORDERS 中的成员之间的距离? 手册https://redis.io/commands/geodist说只能在一键成员之间。

没有 built-in 方法可以做到这一点。但是,您可以尝试以下两种解决方案。

  1. 使用GEOPOS命令获取driver的位置(经度和纬度)和顺序。然后你可以自己计算它们之间的距离。或者您可以将结果放入一个新的 GEOSET 并让 Redis 进行计算。
  2. 将 driver 和订单保存在同一个 GEOSET 中,例如GEOADD geo long1 lat1 driver:idGEOADD geo long2 lat2 Order:id

由于 GEOSETS 是排序集,您可以通过执行 ZUNIONSTORE 创建一个临时键,然后对这些键执行操作

GEODIST 只会计算同一Key 内的地理空间对象之间的距离。但是,地理空间对象的后备存储是一个有序集。使用 ZUNIONSTORE 可以组合这两个集合,并且可以对结果集合执行 GEODIST。

> ZUNIONSTORE result 2 DRIVERS ORDERS aggregate min
> GEODIST result "driver_1" "order_1" km

注意:聚合最小值选项是必需的,否则出现在多个集合中的任何元素都将聚合其分数。对于地理空间数据,这会导致该点移动其经度和纬度位置。