这里我们来学习redis的第六个数据类型:GEO(地理信息)
geospatial地理位置
朋友的定位,附近的人,打车距离计算?
Redis的Geo在Redis.3,2版本就推出了!这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!
1:GEOADD添加位置
127.0.0.1:6379> GEOADD dalian 121.54 39.01 alxz # 大连西站
(integer) 1
127.0.0.1:6379> GEOADD dalian 121.60 39.01 albz # 大连北站
(integer) 1
127.0.0.1:6379> GEOADD dalian 121.63 38.92 alz #大连站
(integer) 1
127.0.0.1:6379> GEOADD dalian 121.32 38.93 alclz #大连长岭站
(integer) 1
127.0.0.1:6379> GEOADD dalian 121.63 38.97 algjz # 大连甘井子站
(integer) 1
2:GEODIST返回给定两个位置之间的绝对距离
单位:
m表示单位为米。
km表示单位为千米。
mi表示单位为英里。
ft表示单位为英尺。
127.0.0.1:6379> GEODIST dalian alxz alz #获取大连西站到大连站的距离,默认米
"12680.1953"
127.0.0.1:6379> GEODIST dalian alxz alz M # 不写M 默认就是米
"12680.1953"
127.0.0.1:6379> GEODIST dalian alxz alz KM # 获取千米值
"12.6802"
127.0.0.1:6379>
3:GEOPOS获取指定城市的经度和纬度
127.0.0.1:6379> GEOPOS dalian alz # 获取大连市,大连站的经纬度
1) 1) "121.6300007700920105"
2) "38.92000084983570218"
4:georadius以给定经纬度为中心,找出某一半径内元素
我附近的人?(获得所有附近的人的地址,定位!)通过半径来查询!
获得指定数量的人,200
所有数据应该都录入:dalian,才会让结果更加精确!
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
COUNT 限定返回的记录数。
ASC: 查找结果根据距离从近到远排序。
DESC: 查找结果根据从远到近排序
127.0.0.1:6379> GEORADIUS dalian 121.60 38.97 5 km # 获取指定经纬度 5 km范围内的地点
1) "algjz"
2) "albz"
127.0.0.1:6379> GEORADIUS dalian 121.60 38.97 5 km COUNT 1 # 获取指定经纬度 5 km范围内指定数量的地点
1) "algjz"
127.0.0.1:6379> GEORADIUS dalian 121.60 38.97 5 km WITHCOORD COUNT 1 # 获取指定经纬度 5 km范围内指定数量的地点,带经纬度显示
1) 1) "algjz"
2) 1) "121.6300007700920105"
2) "38.97000075942482056"
127.0.0.1:6379> GEORADIUS dalian 121.60 38.97 5 km WITHCOORD COUNT 1 DESC # 获取指定经纬度 5 km范围内指定数量的地点(从远到近查)
1) 1) "albz"
2) 1) "121.59999758005142212"
2) "39.01000119404034905"
5:georadiusbymember 以城市为中心
获取大连北站为中心附近15km范围内的位置。从远到近获取
127.0.0.1:6379> GEORADIUSBYMEMBER dalian albz 15 km WITHCOORD DESC
1) 1) "alz"
2) 1) "121.6300007700920105"
2) "38.92000084983570218"
2) 1) "alxz"
2) 1) "121.54000192880630493"
2) "39.01000119404034905"
3) 1) "algjz"
2) 1) "121.6300007700920105"
2) "38.97000075942482056"
4) 1) "albz"
2) 1) "121.59999758005142212"
2) "39.01000119404034905"
127.0.0.1:6379>
6:GEOHASH
通常使用表示位置的元素使用不同的技术,使用Geohāsh位置52点整数编配。由于编码和解码过程中所使用的初始最小和最大坐标不
同,编码的编码也不同于标准。此命令返▣一个标准的Geohash,在维基百科和geohash.org网站都有相关描述
这玩意现阶段没啥用,了解即可。
127.0.0.1:6379> GEOHASH dalian alz
1) "wwymrv0m2q0"
127.0.0.1:6379> GEOHASH dalian alxz
1) "wwymvtw9xr0"
127.0.0.1:6379> GEOHASH dalian albz
1) "wwymzjd3tr0"
该命令将返回11个字符的Geohash字符串!就是将经纬度转换为11字符的base64编码。
重点:GEO底层的实现原理其实就是ZSET。我们可以使用zset命令来操作GEO
127.0.0.1:6379> ZRANGE dalian 0 -1 # 获取所有值
1) "alclz"
2) "alz"
3) "alxz"
4) "algjz"
5) "albz"
127.0.0.1:6379> zrem dalian alz # 删除某个值
(integer) 1
127.0.0.1:6379> ZRANGE dalian 0 -1 # 再次获取,发现就剩4个了。
1) "alclz"
2) "alxz"
3) "algjz"
4) "albz"
以上大概就是GEO的基本使用。
有好的建议,请在下方输入你的评论。