*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 相同前缀越长表示距离越近。但注意边界问题(相邻区域可能前缀不同)。