Redis 中的 GEO 命令详解

阅读时长 5 分钟读完

在前端开发中,经常需要使用地理信息数据进行展示和分析,而 Redis 中的 GEO 命令能够帮助我们对地理位置进行高效的存储和查询。本文将详细介绍 Redis 中的 GEO 命令,并提供示例代码,帮助读者快速上手。

GEO 命令简介

Redis 中的 GEO 命令可以用于存储和查询地理位置信息。它基于经纬度坐标系,支持以下操作:

  1. 添加地理位置信息,包括经纬度、名称和成员值。
  2. 根据给定的位置坐标和半径查询指定范围内的点。
  3. 计算两个位置之间的距离。
  4. 获取指定点的经纬度和成员值。

以下是 Redis 中用于 GEO 命令的关键字:

命令 描述
GEOADD 添加地理位置信息
GEORADIUS 根据给定的位置坐标和半径查询指定范围内的点
GEODIST 计算两个位置之间的距离
GEOHASH 获取指定点的 geohash 值
GEOPOS 获取指定点的经纬度
GEORADIUSBYMEMBER 根据给定的位置查询指定范围内的点(以成员名称代替坐标)
GEOSEARCH 新增命令,更强大的地理位置查询命令 (Redis 6.2+)

GEO 命令示例

下面提供一些常见的 GEO 命令示例,方便读者学习和理解。

添加地理位置信息

使用 GEOADD 命令添加地理位置信息,语法如下:

其中,key 为键名;longitudelatitude 为经度和纬度;member 为成员值。

以添加北京市的经纬度信息为例,代码如下:

根据给定的位置坐标和半径查询指定范围内的点

使用 GEORADIUS 命令可以根据给定的位置坐标和半径查询指定范围内的点,语法如下:

其中,key 为键名;longitudelatitude为中心点的经纬度;radius 为半径;m|km|ft|mi 表示单位为米、千米、英尺或者英里;WITHCOORDWITHDIST 分别表示返回结果包含坐标和距离信息;ASC|DESC 表示返回结果排序方式为升序或降序;COUNT count 表示返回结果数量(默认全部返回)。

以查询距离北京市 10 千米以内的城市为例,代码如下:

计算两个位置之间的距离

使用 GEODIST 命令可以计算两个位置之间的距离,语法如下:

其中,key 为键名;member1member2 分别为两个成员值;m|km|ft|mi 表示单位为米、千米、英尺或者英里。

以计算上海市和北京市的距离为例,代码如下:

获取指定点的经纬度和成员值

使用 GEOPOS 命令可以获取指定点的经纬度,语法如下:

其中,key 为键名;member 为成员值。

以获取北京市的经纬度为例,代码如下:

根据给定的位置查询指定范围内的点(以成员名称代替坐标)

使用 GEORADIUSBYMEMBER 命令可以根据给定的成员名称查询指定范围内的点,语法如下:

其中,key 为键名;member 为成员名称;radius 为半径;m|km|ft|mi 表示单位为米、千米、英尺或者英里;WITHCOORDWITHDIST 分别表示返回结果包含坐标和距离信息;ASC|DESC 表示返回结果排序方式为升序或降序;COUNT count 表示返回结果数量(默认全部返回)。

以查询与北京市的距离在 10 千米以内的城市为例,代码如下:

更强大的地理位置查询命令:GEOSEARCH

GEOSEARCH 是 Redis 6.2+ 版本新增的命令,它支持更加强大、灵活的地理位置查询,能够查询范围、多边形、复杂过滤条件等。

以查询距离北京市 10 千米以内的城市为例,代码如下:

如上所示,比 GEORADIUS 语法更清晰、更直观,也更加灵活。

总结

本文介绍了 Redis 中的 GEO 命令,包括添加地理位置信息、根据给定的位置坐标和半径查询指定范围内的点、计算两个位置之间的距离、获取指定点的经纬度和成员值、根据给定的位置查询指定范围内的点(以成员名称代替坐标)以及更强大的地理位置查询命令 GEOSEARCH。通过以上示例代码,相信读者已经能够掌握 GEO 命令的用法,并能够在实际开发中应用它们。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e47f05f6b2d6eab3ff1b19

纠错
反馈