*Redis GEOADD 命令

向 Geo 集合中添加一个或多个地理位置成员。


*语法

GEOADD key [NX | XX] [CH] longitude latitude member [longitude latitude member ...]

*参数说明

参数 类型 必填 说明
key String Geo 集合键名(底层是 Sorted Set)
NX 标志 仅新增,不更新已有 member
XX 标志 仅更新已有 member
CH 标志 返回变更数量(默认返回新增数)
longitude Double 经度,范围 -180 ~ 180
latitude Double 纬度,范围 -85.05112878 ~ 85.05112878
member String 成员名

*返回值

条件 返回值
默认 新增 member 数量(Integer)
CH 新增 + 修改数量

*时间复杂度

O(log(N))(单个 member),N 为 Geo 集合成员数。


*示例

# 添加单个位置
> GEOADD cities 116.4074 39.9042 "Beijing"
(integer) 1

# 批量添加
> GEOADD cities 121.4737 31.2304 "Shanghai" 113.2644 23.1291 "Guangzhou"
(integer) 2

# 只更新已有
> GEOADD cities XX 116.4074 39.9042 "Beijing"
(integer) 1

*常见错误

  1. 经纬度范围错误:纬度超出约 ±85.05° 时返回错误(因为使用了墨卡托投影)。

*最佳实践

  1. 附近的人/商户:GEOADD 存储用户或商户位置,GEORADIUS 查询附近。
  2. 批量添加:一次 GEOADD 多个位置,减少网络往返。

*FAQ

Q: GEOADD 和 ZADD 有什么区别? A: GEOADD 是 ZADD 的包装,将经纬度编码为 geohash 存入 Sorted Set 的 score。底层数据结构相同。

Q: 坐标精度如何? A: 52 位整数编码,精度约 0.5 米。绝大多数场景足够精确。