Redis数据结构之Geospatial

一、什么是Geospatial

和String一样,也是Redis支持的一种数据类型或者数据结构,用来存储和管理地理位置的

二、相关命令

Geospatial相关的命令有6个,下面依次梳理
在这里插入图片描述

1. geoadd

  • GEOADD key longitude latitude member [longitude latitude member …]

    将指定的地理空间位置(经度、纬度、名称)添加到指定的key

  • 限制:

    • 有效的经度从-180度到180度;
    • 有效的纬度从-85.05112878度到85.05112878度;
    • 当坐标位置超出上述指定范围时,该命令将会返回一个错误:(error) ERR invalid longitude,latitude pair。
127.0.0.1:6379> geoadd china:guangdong:shenzhen 113.88308 22.55329 baoan
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 114.05454 22.52291 futian
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 114.06031 22.72174 longhua
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 113.935898 22.748817 guangming
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 181.935898 22.748817 guangming
(error) ERR invalid longitude,latitude pair 181.935898,22.748817

2. geodist

  • GEODIST key member1 member2 [unit] 返回两个给定位置之间的距离。

  • 如果两个位置之间的其中一个不存在, 那么命令返回空值。

  • 指定单位的参数 unit 必须是以下单位的其中一个:

    • m 表示单位为米(如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位);
    • km 表示单位为千米;
    • mi 表示单位为英里;
    • ft 表示单位为英尺;
  • GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。

  • 计算出的距离会以双精度浮点数的形式被返回。 如果给定的位置元素不存在, 那么命令返回空值。

127.0.0.1:6379> geodist china:guangdong:shenzhen baoan futian
"17935.8200"
127.0.0.1:6379> geodist china:guangdong:shenzhen baoan futian km
"17.9358"
127.0.0.1:6379> geodist china:guangdong:shenzhen baoan xxx
(nil)

3. geohash

  • GEOHASH key member [member …] 返回一个或多个位置元素的 Geohash 表示。

  • Geohash表示就是11个字符的Geohash字符串

  • 返回值:一个数组, 数组的每个项都是一个 geohash 。 命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。

127.0.0.1:6379> geohash china:guangdong:shenzhen baoan futian
1) "ws0br3xnkn0"
2) "ws105k5vrq0" # 
127.0.0.1:6379> geohash china:guangdong:shenzhen baoan baoan
1) "ws0br3xnkn0"
2) "ws0br3xnkn0"

4. geopos

  • GEOPOS key member [member …] 返回指定key中给定位置元素的位置(经度和纬度),可以指定多个位置。
  • 返回值:
    • 返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。
    • 当给定的位置元素不存在时, 对应的数组项为空值。
127.0.0.1:6379> geopos china:guangdong:shenzhen baoan
1) 1) "113.88307839632034302" # 经度
   2) "22.55329111565713873"# 纬度
127.0.0.1:6379> geopos china:guangdong:shenzhen xxx
1) (nil) # xxx位置不存在,返回nil

5. georadius

  • GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

    以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

  • radius单位:

    • m 表示单位为米。
    • km 表示单位为千米。
    • mi 表示单位为英里。
    • ft 表示单位为英尺。
  • 在给定以下可选项时, 命令会返回额外的信息:

    • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
    • WITHCOORD: 将位置元素的经度和维度也一并返回。
    • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
    • 命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
      • ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
      • DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 10 km
1) "baoan"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km
1) "baoan"
2) "futian"
3) "guangming"
4) "longhua"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withcoord
1) 1) "baoan"
   2) 1) "113.88307839632034302" # 加withcoord 将经纬度也返回
      2) "22.55329111565713873"
2) 1) "futian"
   2) 1) "114.05454128980636597"
      2) "22.52290994784130618"
3) 1) "guangming"
   2) 1) "113.93589645624160767"
      2) "22.74881697116738621"
4) 1) "longhua"
   2) 1) "114.06030803918838501"
      2) "22.72174107974333168"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withdist
1) 1) "baoan"
   2) "5.3456" # withdist 将离中心点的距离也返回
2) 1) "futian"
   2) "12.8056"
3) 1) "guangming"
   2) "23.9755"
4) 1) "longhua"
   2) "24.8407"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withhash
1) 1) "baoan"
   2) (integer) 4046340107163728
2) 1) "futian"
   2) (integer) 4046432195313614
3) 1) "guangming"
   2) (integer) 4046616569217917
4) 1) "longhua"
   2) (integer) 4046617158098105
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km count 1 # count 1 只搜索一个
1) "baoan"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withdist desc
# desc,从远到近排序
1) 1) "longhua"
   2) "24.8407"
2) 1) "guangming"
   2) "23.9755"
3) 1) "futian"
   2) "12.8056"
4) 1) "baoan"
   2) "5.3456"

6. georadiusbymember

  • GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

    和georadius作用一样,区别是中心点只能从集合中选取

127.0.0.1:6379> georadiusbymember china:guangdong:shenzhen baoan 100 km
1) "baoan"
2) "futian"
3) "guangming"
4) "longhua"

三、中文官网资料

http://www.redis.cn/commands/geoadd.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值