*Redis GEODIST 命令

GEODIST 用于返回两个地理位置成员之间的距离。


*语法

GEODIST key member1 member2 [M | KM | FT | MI]

*参数说明

参数 类型 必填 说明
key String 键名(Geo 键)
member1 String 第一个地理位置成员
member2 String 第二个地理位置成员
M Flag 距离单位:米(默认)
KM Flag 距离单位:千米
FT Flag 距离单位:英尺
MI Flag 距离单位:英里

*返回值

  • Double:两个成员之间的距离
  • Nil:其中一个或两个成员不存在

*时间复杂度

O(log(N)),其中 N 是 Geo 集合中的成员数量


*示例

*基本用法(默认米)

> GEOADD cities 116.40 39.90 "beijing" 121.47 31.23 "shanghai"
2
> GEODIST cities beijing shanghai
"1067867.3789"

*指定千米

> GEODIST cities beijing shanghai KM
"1067.8674"

*指定英里

> GEODIST cities beijing shanghai MI
"663.5197"

*成员不存在

> GEODIST cities beijing shenzhen
(nil)

*常见错误

错误 原因 解决
ERR wrong number of arguments 参数数量不足 提供 key、member1、member2
WRONGTYPE Operation against a key holding the wrong kind of value key 不是 Geo 类型 确认 key 是通过 GEOADD 创建的

*最佳实践

  • 场景:计算两地距离、附近推荐、物流路径规划
  • 默认单位是米,建议显式指定单位避免歧义
  • 注意:距离计算基于球面模型,精度在 0.5% 左右
  • 对于超高精度需求,建议结合外部地图服务

*FAQ

Q1: GEODIST 的计算精度如何? A: 基于 haversine 公式,误差约 0.5%。对于短距离(<100m)或超高精度场景,建议结合其他工具。

Q2: 可以计算多个成员之间的距离吗? A: 不可以,GEODIST 只支持两个成员。需要计算多个距离时,需多次调用或结合 GEORADIUS

Q3: 返回的距离是直线距离还是实际路径? A: 是直线距离(大圆距离),不是实际行驶路径距离。