*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: 是直线距离(大圆距离),不是实际行驶路径距离。