Redis 三种特殊类型之 Geospatial 类型

Redis 三种特殊类型之 Geospatial 类型

简单介绍

Geospatial(地理空间)在 Redis 3.2 版本推出, 是一种地理位置相关的数据结构。该功能可以推算地理位置的信息,两地之间的距离,方圆几里的人。一般可以用于朋友的定位,附近的人,打车的距离等场景。

基本指令

# GEOADD 添加地理位置信息,这里注意不能包括两极地区
127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijing # 添加一个地理位置信息,经度,纬度,名称的顺序
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 120.16 30.14 hangzhou 108.96 34.26 xian # 添加多个地理位置信息
(integer) 4

# GEOPOS 获取指定位置的经度和纬度
127.0.0.1:6379> GEOPOS china:city chongqing # 获取一个位置的定位
1) 1) "106.49999767541885376"
   2) "29.52999957900659211"
127.0.0.1:6379> GEOPOS china:city chongqing beijing shanghai # 获取多个位置的定位
1) 1) "106.49999767541885376"
   2) "29.52999957900659211"
2) 1) "116.39999896287918091"
   2) "39.90000009167092543"
3) 1) "121.47000163793563843"
   2) "31.22999903975783553"
   
# GEODIST 返回两个指定位置之间的直线距离,可以指定具体单位,默认为米
127.0.0.1:6379> GEODIST china:city beijing chongqing km # 获取北京和重庆之间的距离,单位取 km
"1464.0708"

# GEORADIUS 以给定的经纬度为中心,返回某一半径内的所有元素
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km # 在经度110,纬度30,半径 2000 千米内的所有位置
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withcoord # 同时显示所有位置坐标
1) 1) "chongqing"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) 1) "108.96000176668167114"
      2) "34.25999964418929977"
3) 1) "shenzhen"
   2) 1) "114.04999762773513794"
      2) "22.5200000879503861"
4) 1) "hangzhou"
   2) 1) "120.1600000262260437"
      2) "30.14000050377078566"
5) 1) "shanghai"
   2) 1) "121.47000163793563843"
      2) "31.22999903975783553"
6) 1) "beijing"
   2) 1) "116.39999896287918091"
      2) "39.90000009167092543"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist # 同时显示所有位置的距离,默认正序,可倒序 desc
1) 1) "chongqing"
   2) "341.9374"
2) 1) "xian"
   2) "483.8340"
3) 1) "shenzhen"
   2) "924.6408"
4) 1) "hangzhou"
   2) "977.7700"
5) 1) "shanghai"
   2) "1105.9098"
6) 1) "beijing"
   2) "1245.2858"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withhash # 同时显示左右位置的哈希
1) 1) "chongqing"
   2) (integer) 4026042091628984
2) 1) "xian"
   2) (integer) 4040115445396757
3) 1) "shenzhen"
   2) (integer) 4046432193584628
4) 1) "hangzhou"
   2) (integer) 4054121460196926
5) 1) "shanghai"
   2) (integer) 4054803462927619
6) 1) "beijing"
   2) (integer) 4069885360207904
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km count 2 # 限制返回数量为 2
1) "chongqing"
2) "xian"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km store china:city # 和集群有关
(integer) 6
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km storedist china:city # 和集群有关
(integer) 6

# GEORADIUSBYMEMBER 以给定的位置为中心,其余参与和上指令完全一样
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km # 返回集合中距离北京 1000 千米的所有位置
1) "beijing"
2) "xian"

# GEOHASH 获取各个位置经纬度的哈希值,长度为 11 位
127.0.0.1:6379> GEOHASH china:city beijing
1) "wx4fbxxfke0"
127.0.0.1:6379> GEOHASH china:city shanghai xian chongqing
1) "wtw3sj5zbj0"
2) "wqj6zky6bn0"
3) "wm5xzrybty0"

# 删除位置,查看所有位置,通过 zset 相关指令,同时也说明了其底层用到了 zset
127.0.0.1:6379> ZRANGE china:city 0 -1 # 查看集合中所有的位置
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> ZREM china:city beijing # 删除集合中指定的位置
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"

应用场景

  1. 查看附近的人
  2. 微信位置共享
  3. 地图上直线距离的展示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值