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 ...]
参数说明:
选项说明:
返回值:整型,返回新增或变更的元素数量。
注意:使用GEOADD命令添加坐标时,若已有相同位置,则使用新坐标替换已有坐标。
示例:
2. 查询:GEOPOS命令
功能:从给定key中返回指定名称的位置(经度和纬度)。
语法:GEOPOS key member [member ...]
返回:数组,每个元素为一个包含经度和纬度的子数组。
示例:
3. 计算举例:GEODIST命令
功能:返回两个成员之间的距离,基于地球为完美球体的假设,计算结果可能存在%0.5误差。
语法:GEODIST key member1 member2 [M | KM | FT | MI]
选项说明:
返回:可以转换为双精度浮点型的字符串。
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]
选项说明:
返回值:数组,包含名称、经纬度、距离、GEOHASH值等信息。
示例:
6. 查询指定范围的地点:GEOSEARCHSTORE命令
功能:存储匹配结果,将位置信息存储到目标键中。默认存储位置信息,可选以距离作为分数存储。
语法:GEOSEARCHSTORE destination source FROMMEMBER member | FROMLONLAT longitude latitude BYRADIUS radius [ASC | DESC] [COUNT count [ANY]][STOREDIST]
返回值:整型,存储的成员数量。
示例: