我在redis中有两个键(geo zset),第一个是“DRIVERS”,第二个是“ORDERS”,其中包含成员。 是否可以计算DRIVERS中的成员与ORDERS内的成员之间的距离? 手册https://redis.io/commands/geodist表示只能在一个密钥中的成员之间进行。
答案 0 :(得分:3)
没有内置的方法可以做到这一点。但是,您可以尝试以下两种解决方案。
GEOPOS
命令获取驱动程序和订单的位置(经度和纬度)。然后你可以自己计算它们之间的距离。或者您可以将结果放入新的GEOSET
并让Redis进行计算。GEOSET
中保存所有驱动程序和订单,例如GEOADD geo long1 lat1 driver:id
,GEOADD 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 中的任何元素都将汇总其分数。对于地理空间数据,这会导致点移动其经度和纬度位置。