在前端开发中,经常需要使用地理信息数据进行展示和分析,而 Redis 中的 GEO 命令能够帮助我们对地理位置进行高效的存储和查询。本文将详细介绍 Redis 中的 GEO 命令,并提供示例代码,帮助读者快速上手。
GEO 命令简介
Redis 中的 GEO 命令可以用于存储和查询地理位置信息。它基于经纬度坐标系,支持以下操作:
- 添加地理位置信息,包括经纬度、名称和成员值。
- 根据给定的位置坐标和半径查询指定范围内的点。
- 计算两个位置之间的距离。
- 获取指定点的经纬度和成员值。
以下是 Redis 中用于 GEO 命令的关键字:
命令 | 描述 |
---|---|
GEOADD | 添加地理位置信息 |
GEORADIUS | 根据给定的位置坐标和半径查询指定范围内的点 |
GEODIST | 计算两个位置之间的距离 |
GEOHASH | 获取指定点的 geohash 值 |
GEOPOS | 获取指定点的经纬度 |
GEORADIUSBYMEMBER | 根据给定的位置查询指定范围内的点(以成员名称代替坐标) |
GEOSEARCH | 新增命令,更强大的地理位置查询命令 (Redis 6.2+) |
GEO 命令示例
下面提供一些常见的 GEO 命令示例,方便读者学习和理解。
添加地理位置信息
使用 GEOADD 命令添加地理位置信息,语法如下:
GEOADD key longitude latitude member
其中,key
为键名;longitude
和latitude
为经度和纬度;member
为成员值。
以添加北京市的经纬度信息为例,代码如下:
GEOADD city 116.405285 39.904989 "Beijing"
根据给定的位置坐标和半径查询指定范围内的点
使用 GEORADIUS 命令可以根据给定的位置坐标和半径查询指定范围内的点,语法如下:
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]
其中,key
为键名;longitude
和latitude
为中心点的经纬度;radius
为半径;m|km|ft|mi
表示单位为米、千米、英尺或者英里;WITHCOORD
和 WITHDIST
分别表示返回结果包含坐标和距离信息;ASC|DESC
表示返回结果排序方式为升序或降序;COUNT count
表示返回结果数量(默认全部返回)。
以查询距离北京市 10 千米以内的城市为例,代码如下:
GEORADIUS city 116.405285 39.904989 10 km WITHCOORD WITHDIST
计算两个位置之间的距离
使用 GEODIST 命令可以计算两个位置之间的距离,语法如下:
GEODIST key member1 member2 [m|km|ft|mi]
其中,key
为键名;member1
和 member2
分别为两个成员值;m|km|ft|mi
表示单位为米、千米、英尺或者英里。
以计算上海市和北京市的距离为例,代码如下:
GEODIST city Shanghai Beijing km
获取指定点的经纬度和成员值
使用 GEOPOS 命令可以获取指定点的经纬度,语法如下:
GEOPOS key member [member ...]
其中,key
为键名;member
为成员值。
以获取北京市的经纬度为例,代码如下:
GEOPOS city Beijing
根据给定的位置查询指定范围内的点(以成员名称代替坐标)
使用 GEORADIUSBYMEMBER 命令可以根据给定的成员名称查询指定范围内的点,语法如下:
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]
其中,key
为键名;member
为成员名称;radius
为半径;m|km|ft|mi
表示单位为米、千米、英尺或者英里;WITHCOORD
和 WITHDIST
分别表示返回结果包含坐标和距离信息;ASC|DESC
表示返回结果排序方式为升序或降序;COUNT count
表示返回结果数量(默认全部返回)。
以查询与北京市的距离在 10 千米以内的城市为例,代码如下:
GEORADIUSBYMEMBER city "Beijing" 10 km WITHCOORD WITHDIST
更强大的地理位置查询命令:GEOSEARCH
GEOSEARCH 是 Redis 6.2+ 版本新增的命令,它支持更加强大、灵活的地理位置查询,能够查询范围、多边形、复杂过滤条件等。
以查询距离北京市 10 千米以内的城市为例,代码如下:
GEOSEARCH city FROMMEMBER "Beijing" BYRADIUS 10 km WITHCOORD WITHDIST
如上所示,比 GEORADIUS 语法更清晰、更直观,也更加灵活。
总结
本文介绍了 Redis 中的 GEO 命令,包括添加地理位置信息、根据给定的位置坐标和半径查询指定范围内的点、计算两个位置之间的距离、获取指定点的经纬度和成员值、根据给定的位置查询指定范围内的点(以成员名称代替坐标)以及更强大的地理位置查询命令 GEOSEARCH。通过以上示例代码,相信读者已经能够掌握 GEO 命令的用法,并能够在实际开发中应用它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e47f05f6b2d6eab3ff1b19