1. 增加地理位置信息

  • geoadd

longitude、latitude、member分别是该地理位置的经度、纬度、成员

image.png

  1. 127.0.0.1:6379> geoadd cities:locations 116.28 39.55 beijing
  2. (integer) 1

2. 获取地理位置信息

  • geopos
  1. 127.0.0.1:6379> geopos cities:locations tianjin
  2. 1) 1) "117.12000042200088501"
  3. 2) "39.0800000535766543"

3. 获取两个地理位置的距离

  • geodist
  1. 127.0.0.1:6379> geodist cities:locations tianjin beijing km
  2. "89.2061"

4. 获取指定位置范围内的地理信息位置集合

  • georadius
  • georadiusbymember

georadius 和 georadiusbymember 两个命令的作用是一样的, 都是以一个地理位置为中心算出指定半径内的其他地理信息位置, 不同的是 georadius 命令的中心位置给出了具体的经纬度, georadiusbymember 只需给出成员即可。

  1. 127.0.0.1:6379> georadiusbymember cities:locations beijing 150 km
  2. 1) "beijing"
  3. 2) "tianjin"
  4. 3) "tangshan"
  5. 4) "baoding"

5. 获取 geohash

将二维经纬度转换为一维字符串

  • geohash

特点:

  • GEO 的数据类型为 zset, Redis 将所有地理位置信息的 geohash 存放在 zset 中
  • 字符串越长, 表示的位置更精确

    1. 3-8 geohash 长度与精度对应关系<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/663581/1606803388735-e880b91d-d04e-4f9e-b6c0-b353959b2bae.png#align=left&display=inline&height=452&margin=%5Bobject%20Object%5D&name=image.png&originHeight=512&originWidth=580&size=71053&status=done&style=none&width=512)
  • 两个字符串越相似, 它们之间的距离越近, Redis 利用字符串前缀匹配算法实现相关的命令

  • geohash 编码和经纬度是可以相互转换的

6. 删除地理位置信息

  • zrem