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

时间:2017-08-09 10:34:18

标签: redis distance geo

我在redis中有两个键(geo zset),第一个是“DRIVERS”,第二个是“ORDERS”,其中包含成员。 是否可以计算DRIVERS中的成员与ORDERS内的成员之间的距离? 手册https://redis.io/commands/geodist表示只能在一个密钥中的成员之间进行。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

由于GEOSETS是有序集,您可以通过执行ZUNIONSTORE创建临时密钥,然后对这些密钥执行操作

答案 2 :(得分:0)

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

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

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