*Redis GEOHASH 命令
GEOHASH 用于返回一个或多个地理位置成员的 Geohash 字符串。
*语法
GEOHASH key member [member ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 键名(Geo 键) |
| member | String | 是 | 地理位置成员(可多个) |
*返回值
- Array of Bulk Strings:各成员的 Geohash 字符串
- 不存在的成员返回对应的元素为 (nil)
*时间复杂度
O(log(N)),其中 N 是 Geo 集合中的成员数量,M 是请求的成员数量
*示例
*基本用法
> GEOADD cities 116.40 39.90 "beijing" 121.47 31.23 "shanghai"
2
> GEOHASH cities beijing shanghai
1) "wx4g0b9x"
2) "wtw3sjq6"
*部分成员不存在
> GEOHASH cities beijing shenzhen
1) "wx4g0b9x"
2) (nil)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 参数数量不足 | 提供 key 和至少一个 member |
| WRONGTYPE Operation against a key holding the wrong kind of value | key 不是 Geo 类型 | 确认 key 是通过 GEOADD 创建的 |
*最佳实践
- 场景:与外部地图服务集成、Geohash 索引、空间分区
- Geohash 可用于在客户端进行空间索引或缓存
- 注意:Redis 返回的 Geohash 精度为 11 个字符(约 0.037mm)
- 可以与外部系统(如 Elasticsearch)共享 Geohash 实现一致的空间查询
*FAQ
Q1: Geohash 是什么? A: Geohash 是一种将经纬度编码为字符串的算法,字符串越长精度越高,相同前缀表示地理位置相近。
Q2: 返回的 Geohash 有多少位? A: Redis 返回 11 位 Geohash,精度约 0.037mm。
Q3: 可以用 Geohash 判断两个地点是否相邻吗? A: 可以,Geohash 相同前缀越长表示距离越近。但注意边界问题(相邻区域可能前缀不同)。