Redis三种特殊数据类型(地理位置)
Posted MyAzhe0ci3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis三种特殊数据类型(地理位置)相关的知识,希望对你有一定的参考价值。
geospatial地理位置
朋友的定位,附近的人,打车距离计算?
Redis的Geo在Redis3.2版本就推出了!这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!
可以查询一些测试数据: http://www.jsons.cn/ngcodeinfo/0706D99C19A781A3/
只有六个命令
官方文档: https://www.redis.net.cn/order/3685.html
getadd 添加地理位置
规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入
参数key 值(纬度经度,名称)
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。
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 206.50 29.53 chongqing
(error) ERR invalid longitude,latitude pair 206.500000,29.530000
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing
(integer) 1
127.0.0.1:6379> geoadd china:city 114.05 22.52 shenzhen
(integer) 1
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2
getpos
获得当前定位,一定是一个坐标值!
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 chongqing
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
GEODIST
两人之间的距离!
- m 表示单位为米。
- km 表示单位为千米。
- mi 表示单位为英里。
- ft 表示单位为英尺。
127.0.0.1:6379> GEODIST china:city beijing chongqing//查看北京到重庆的直线距离
"1464070.8051"
127.0.0.1:6379> GEODIST china:city beijing chongqing km//查看北京到重庆的直线距离KM
"1464.0708"
127.0.0.1:6379> GEODIST china:city beijing shanghai km查看北京到上海的直线距离KM
"1067.3788"
georaidus 以给定的经纬度为中心,找出某一半径内的元素
获得指定数量的人,200
所有的数据应该录入:china:city,才会让结果更加请求!
我附近的人?(获取所有附近人的地址,定位!)通过半径来查询
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km//以110,30 这个经纬度为中心,寻找方圆1000km的城市
1) "chongqing"
2) "xian"
3) "shenzhen"
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 1000 km withdist //显示到中心距离的位置
1) 1) "chongqing"
2) "341.9374"
2) 1) "xian"
2) "483.8340"
3) 1) "shenzhen"
2) "924.6408"
4) 1) "hangzhou"
2) "977.5143"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 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.2400003229490224"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist withcoord count 1//筛选出指定的结果
1) 1) "chongqing"
2) "341.9374"
3) 1) "106.49999767541885376"
2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist withcoord count 3
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"
3) 1) "shenzhen"
2) "924.6408"
3) 1) "114.04999762773513794"
2) "22.5200000879503861"
Redis 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表示
//将二维的经纬度转为一维的字符串,如果两个字符串越接近,那么则距离越近
127.0.0.1:6379> geohash china:city beijing chongqing
1) "wx4fbxxfke0"
2) "wm5xzrybty0"
GEO底层的实现原理其实就是Zset !我们可以使用Zset命令來操作geo !
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"
以上是关于Redis三种特殊数据类型(地理位置)的主要内容,如果未能解决你的问题,请参考以下文章
Redis学习笔记3:五大数据类型(StringListSetHashZset)和三种特殊数据类型(geospatialHyperloglogBitmaps)
Redis学习笔记3:五大数据类型(StringListSetHashZset)和三种特殊数据类型(geospatialHyperloglogBitmaps)