NoSql-Redis三种特殊数据类型-Geospatial

前面我们介绍完了Redis的常见的五种数据类型。现在来介绍一下比较特殊的三种类型之一
 
 

白嫖者vsup主

官方文档:https://www.redis.net.cn/order/3685.html

一.Geospatial 地理位置
朋友的定位,附近的人,打车距离计算?
Redis Geo Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆
几里的人!
可以查询一些测试数据: http://www.jsons.cn/lngcodeinfo/0706D99C19A781A3/
只有 六个命令:

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。

该命令以采用标准格式的参数x,y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下:

------------------------------------------------------------------------------------------------------------------------------

# geoadd 添加地理位置
# 规则:两级【南极和北极】无法直接添加,我们一般会下载城市数据,直接通过 程序一次性导入!
# 有效的经度从 -180 度到 180 度。
# 有效的纬度从 -85.05112878 度到 85.05112878 度。
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
# 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin
(error) ERR invalid longitude,latitude pair 39 .900000,116.400

------------------------------------------------------------------------------------------------------------------------------

  • 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 shengzhen
  • (integer) 2
  • 127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
  • (integer) 2

------------------------------------------------------------------------------------------------------------------------------

  • 127.0.0.1:6379>  GEOPOS china:city beijing      // 获取 精度维度
  • 1) 1) "116.39999896287918091"
  •    2) "39.90000009167092543"
  • 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
  • 1) 1) "106.49999767541885376"
  •    2) "29.52999957900659211"
  • 2) 1) "116.39999896287918091"
  •    2) "39.90000009167092543"

------------------------------------------------------------------------------------------------------------------------------

两人之间的距离!
单位:
  1. m 表示单位为米。
  2. km 表示单位为千米。
  3. mi 表示单位为英里。
  4. ft 表示单位为英尺。
  • 127.0.0.1:6379> GEODIST china:city beijing chongqing       // 获取 指向距离 默认的单位是 km
  • "1464070.8051"
  • 127.0.0.1:6379> GEODIST china:city beijing chongqing km
  • "1464.0708"
  • 127.0.0.1:6379> GEODIST china:city beijing chongqing m
  • "1464070.8051"
     

------------------------------------------------------------------------------------------------------------------------------

georadius 以给定的经纬度为中心, 找出某一半径内的元素
我附近的人? (获得所有附近的人的地址,定位!)通过半径来查询!
获得指定数量的人, 200
所有数据应该都录入: china:city ,才会让结果更加请求!
 
  • 127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km     // 显示 以 110 30 精度维度为中心 半径在1000km内的城市
  • 1) "chongqing"
  • 2) "xian"
  • 3) "shengzhen"
  • 4) "hangzhou"
  • 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
  • 1) "chongqing"
  • 2) "xian"
  • 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist   // 加上城市距离这个中心的 距离
  • 1) 1) "chongqing"
  •    2) "341.9374"
  • 2) 1) "xian"
  •    2) "483.8340"
  • 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord // 在加上这个城市的精度维度
  • 1) 1) "chongqing"
  •    2) "341.9374"
  •    3) 1) "106.49999767541885376"
  •       2) "29.52999957900659211"
  • 2) 1) "xian"
  •    2) "483.8340"
  •    3) 1) "108.96000176668167114"
  •       2) "34.25999964418929977"
  • 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 1     // 指定显示的个数
  • 1) 1) "chongqing"
  •    2) "341.9374"
  •    3) 1) "106.49999767541885376"
  •       2) "29.52999957900659211

------------------------------------------------------------------------------------------------------------------------------

GEORADIUSBYMEMBER

与上面类似的,找出位于指定元素的其他元素

  • 127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km      // 加上了自己
  • 1) "beijing"
  • 2) "xian"
  • 127.0.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km
  • 1) "hangzhou"
  • 2) "shanghai"

------------------------------------------------------------------------------------------------------------------------------

GEOHASH 命令 - 返回一个或多个位置元素的 Geohash 表示
该命令将返回 11 个字符的 Geohash 字符串 !
# 将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近!
 
  • 127.0.0.1:6379> GEOHASH china:city beijing chongqing
  • 1) "wx4fbxxfke0"
  • 2) "v0gs3y0zh70"
     

------------------------------------------------------------------------------------------------------------------------------

GEO 底层的实现原理其实就是 Zset !我们可以使用 Zset 命令来操作 geo
  • 127.0.0.1:6379> ZRANGE china:city 0 -1 # 查看地图中全部的元素
  • 1) "chongqi"
  • 2) "xian"
  • 3) "shengzhen"
  • 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) "chongqi"
  • 2) "xian"
  • 3) "shengzhen"
  • 4) "hangzhou"
  • 5) "shanghai"
 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值