Redis三种特殊数据类型-Geospatial(地理位置)

前言

提示:本文章是日常学习内容的总结,并非全部原创;仅供大家参考借鉴,并无其他商业用途。Bilibili搜索关注:狂神说
真正在公司中的实践:NoSQL + RDBMS 一起使用才是最强的,阿里巴巴的架构演进!
技术没有高低之分,就看你如何去使用!(提升内功,思维的提高!)
云计算的长征之路:阿里云的这群疯子

Geospatial(地理位置)概括

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

在这里插入图片描述

1、geoadd 添加地理位置

# 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入! 
# 有效的经度从-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.400000 

# 参数 key 值() 
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 chongqi 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

2、geopos 获得当前坐标值

127.0.0.1:6379> GEOPOS china:city beijing                           # 获取指定的城市的经度和纬度! 
1) 1) "116.39999896287918091" 
   2) "39.90000009167092543" 
127.0.0.1:6379> GEOPOS china:city beijing chongqi 
1) 1) "116.39999896287918091" 
   2) "39.90000009167092543" 
2) 1) "106.49999767541885376" 
   2) "29.52999957900659211"

3、geodist 返回两地之间的距离

单位:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。

127.0.0.1:6379> GEODIST china:city beijing shanghai km                 # 查看上海到北京的直线距离 
"1067.3788" 
127.0.0.1:6379> GEODIST china:city beijing chongqi  km                  # 查看重庆到北京的直线距离 
"1464.0708"

4、georadius 以给定的经纬度为中心, 找出某一半径内的元素

我附近的人? (获得所有附近的人的地址,定位!)通过半径来查询!
获得附近指定数量的人,如:200人
所有数据应该都录入:china:city

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km          # 以110,30 这个经纬度为中心,寻找方圆1000km内的城市 
1) "chongqi" 
2) "xian" 
3) "shengzhen" 
4) "hangzhou" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist                      # 显示到中间距离的位置 
1) 1) "chongqi" 
   2) "341.9374" 
2) 1) "xian" 
   2) "483.8340" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord                     # 显示他人的定位信息 
1) 1) "chongqi" 
   2) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
2) 1) "xian" 
   2) 1) "108.96000176668167114" 
      2) "34.25999964418929977" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 1    # 筛选出指定数量的结果! 
1) 1) "chongqi" 
   2) "341.9374" 
   3) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 2 
1) 1) "chongqi" 
   2) "341.9374" 
   3) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
2) 1) "xian" 
   2) "483.8340" 
   3) 1) "108.96000176668167114" 
      2) "34.25999964418929977"

5、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"

6、geohash 返回元素的 Geohash 表示(了解就好)

Geohash :将位置信息转化为 11个字符的Geohash字符串!
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近!


127.0.0.1:6379> geohash china:city beijing chongqi              
1) "wx4fbxxfke0" 
2) "wm5xzrybty0"

7、Geospatial 的其他操作 -查看,删除

GEO 底层的实现原理其实就是 Zset!
我们可以使用Zset命令来操作Geospatial !

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"

猜你喜欢

转载自blog.csdn.net/ws13575291650/article/details/112546100