Redis的数据类型-GEO

大哥大姐们在线求帮请教一下,Redis的数据类型-GEO
最新回答
清风不语

2025-06-27 03:52:37

Redis新增的GEO数据类型主要用于存储和操作地理位置信息。GEO实际上是一种有序集合(zset),每个元素包含经度、纬度和位置名称,通过这些属性,可以在Redis中存储和操作地理坐标。


使用场景主要涉及地图应用、位置服务、地理空间分析等,例如商家定位、位置搜索和推荐、用户位置分析等。


常用命令


1. 添加:GEOADD命令


功能:用于存储指定的地理空间位置,可以将一个或多个经度、纬度和位置名称添加到指定的key中。


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


参数说明:



  • longite:地点的经度,范围:-180度到180度,经度必须放在纬度之前。

  • latitude:地点的纬度,范围:-85.05112878度到85.05112878度。

  • member:地点名称。


选项说明:



  • NX:不添加新元素,只更新既有元素,v6.2.0版本出现。

  • XX:不更新既有元素,只添加新元素,v6.2.0版本出现。

  • CH:返回变更过的元素数量,同时包含新增和更新,v6.2.0版本出现。


返回值:整型,返回新增或变更的元素数量。


注意:使用GEOADD命令添加坐标时,若已有相同位置,则使用新坐标替换已有坐标。


示例:


2. 查询:GEOPOS命令


功能:从给定key中返回指定名称的位置(经度和纬度)。


语法:GEOPOS key member [member ...]


返回:数组,每个元素为一个包含经度和纬度的子数组。


示例:


3. 计算举例:GEODIST命令


功能:返回两个成员之间的距离,基于地球为完美球体的假设,计算结果可能存在%0.5误差。


语法:GEODIST key member1 member2 [M | KM | FT | MI]


选项说明:



  • M:单位:米。

  • KM:单位:公里(千米)。

  • FT:单位:英里。

  • M:单位:英尺。


返回:可以转换为双精度浮点型的字符串。


4. 获取GEOHASH值:GEOHASH命令


Geohash是一种地理编码系统,将经纬度编码为数字和字母组成的字符串。虽然表示的是区域,但可以用于隐私保护。


功能:返回指定成员的地理位置的GEOHASH值。


语法:GEOHASH key member [member ...]


返回值:数组,包含每个位置成员对应的GEOHASH值。


示例:


5. 查询指定范围的地点:GEOSEARCH命令


功能:以经纬度为中心,返回距离不超过最大距离的所有位置元素。


语法:GEOSEARCH key FROMMEMBER member | FROMLONLAT longitude latitude BYRADIUS radius [ASC | DESC][COUNT count [ANY]][WITHCOORD][WITHDIST][WITHHASH]


选项说明:



  • FROMMEMBER:指定起始成员。

  • FROMLONLAT:指定经纬度。

  • BYRADIUS:指定最大距离。

  • ASC | DESC:返回结果的排序。

  • COUNT:返回结果的数量。

  • WITHCOORD:返回经度和纬度。

  • WITHDIST:返回与中心点的距离。

  • WITHHASH:返回GEOHASH值。


返回值:数组,包含名称、经纬度、距离、GEOHASH值等信息。


示例:


6. 查询指定范围的地点:GEOSEARCHSTORE命令


功能:存储匹配结果,将位置信息存储到目标键中。默认存储位置信息,可选以距离作为分数存储。


语法:GEOSEARCHSTORE destination source FROMMEMBER member | FROMLONLAT longitude latitude BYRADIUS radius [ASC | DESC] [COUNT count [ANY]][STOREDIST]


返回值:整型,存储的成员数量。


示例: