沃梦达 / IT编程 / 数据库 / 正文

Redis GEORADIUSBYMEMBER命令

Redis GEORADIUSBYMEMBER命令是基于指定位置的点集合,按照半径的距离范围进行查询,并返回指定的GeoHash字符串。

Redis GEORADIUSBYMEMBER命令

Redis GEORADIUSBYMEMBER命令是基于指定位置的点集合,按照半径的距离范围进行查询,并返回指定的GeoHash字符串。

GEORADIUSBYMEMBER命令的使用场景是基于地理位置数据集,如城市经纬度、商家定位、影院经纬度等,实现一些地理位置信息的查询需求。

Redis GEORADIUSBYMEMBER命令的使用方法

GEORADIUSBYMEMBER命令参数说明如下:

georadiusbymember key member radius unit [withdist] [withcoord] [withhash] [count count] [asc|desc] [store key] [storedist key]
  • key: GeoHash键
  • member: 指定的GeoHash字符串
  • radius: 搜索半径,与unit一起构成搜索半径范围,单位可以是米、千米、英里或英尺
  • unit: 搜索半径单位,可选值为m、km、mi、ft
  • withdist: 是否返回距离,1为是,0为否,当指定时,结果中会包含距离信息
  • withcoord: 是否返回坐标,1为是,0为否,当指定时,结果中会包含坐标信息
  • withhash: 是否返回GeoHash字符串,1为是,0为否,当指定时,结果中会包含GeoHash字符串信息
  • count: 返回的数据数量限制,即最多返回数量,当指定时,只会返回目标数量的结果,默认返回全部
  • asc/desc: 指定数据排序方式,asc表示升序,desc表示降序,默认是升序
  • store key: 如果指定,则将搜索结果的坐标位置保存到指定的key中
  • storedist key: 如果指定,则将搜索结果的距离保存到指定的key中

注意:当同时使用withdist和withcoord时,结果集中先返回距离,后返回坐标。

Redis GEORADIUSBYMEMBER命令的实例

实例1:

假设我们需要查询一个圆形区域内所有影院信息,影院的经纬度已经存储在Redis中。现在我们需要查询北京远洋商圈内所有的影院信息,该商圈的经纬度是40.078687, 116.216369,实现步骤如下:

1、使用GEOADD命令将影院信息添加到redis中。

127.0.0.1:6379> GEOADD cinema 116.219062, 40.072019, beijing1
(integer) 1
127.0.0.1:6379> GEOADD cinema 116.237213, 40.064424, beijing2
(integer) 1
127.0.0.1:6379> GEOADD cinema 116.175114, 40.082982, beijing3
(integer) 1
127.0.0.1:6379> GEOADD cinema 116.218090, 40.081568, beijing4
(integer) 1

2、使用GEORADIUSBYMEMBER命令查询影院信息,半径为2公里,同时返回影院坐标信息和GeoHash字符串信息。

127.0.0.1:6379> GEORADIUSBYMEMBER cinema beijing1 2000 m withcoord withhash
1) 1) "beijing1"
   2) 1) "116.2190625667572"
      2) "40.07201815458682"
      3) "wx4gde6q17r"

3、使用GEORADIUSBYMEMBER命令查询影院信息,半径为2公里,只返回距离信息和坐标信息。

127.0.0.1:6379> GEORADIUSBYMEMBER cinema beijing1 2000 m withdist withcoord
 1) 1) "beijing1"
    2) "1.6371"
    3) 1) "116.2190625667572"
       2) "40.07201815458682"
 2) 1) "beijing4"
    2) "1.6834"
    3) 1) "116.21808993816376"
       2) "40.08156828979726"

实例2:

现在我们需要查询两个城市之间的距离,城市经纬度信息如下:

  • 北京: 39.904989,116.405285
  • 上海: 31.230416,121.473701

实现步骤如下:

1、首先使用GEOADD命令将城市信息存储到Redis中。

127.0.0.1:6379> GEOADD city 116.405285, 39.904989, beijing
(integer) 1
127.0.0.1:6379> GEOADD city 121.473701, 31.230416, shanghai
(integer) 1

2、使用GEODIST命令计算两个城市之间的距离。

127.0.0.1:6379> GEODIST city beijing shanghai km
"1063.9386"

总结

Redis GEORADIUSBYMEMBER命令可以方便地实现基于地理位置的搜索、查询等功能。通过该命令,可以快速找到一定范围内的商家、影院等信息,并可以方便地计算两个区域之间的距离。

本文标题为:Redis GEORADIUSBYMEMBER命令

上一篇: Redis GETBIT命令
下一篇: Redis BITPOS命令