十四、Redis三种特殊类型之一Geospatial
一.概述
redis除了提供了五大基本数据类型String、List、Set、Hash、Zset,还有3个比较特殊的数据类型,Geospatial、Hyperloglog、Bitmap,这三个数据类型有一些比较有趣的应用场景,下面说说Geospatial,主要可以应用于跟地图相关的应用。
朋友的定位,附近的人,打车距离计算?
Redis 的 Geo 在Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!
纬度范围:-85.05112878度到85.05112878度。
经度范围:-180度到180度
两极没有经度和纬度
二.相关命令
geoadd #将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
geodist #返回两个给定位置之间的距离。
geohash #返回一个或多个位置元素的 Geohash 表示
geopos #从key里返回所有给定位置元素的位置(经度和纬度)
georadius #以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素
georadiusbymember #中心点是由给定的位置元素决定的,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素
三、geospatial类型的操作配置
1.GEOADD
指定的地理空间位置(纬度、经度、名称)添加到指定的key中,经纬度查询百度一下即可。
127.0.0.1:6379> geoadd city 116.23 40.22 beijing
127.0.0.1:6379> geoadd city 117.19 39.01 tianjin
127.0.0.1:6379> geoadd city 121.47 31.23 shanghai 118.77 32.04 nanjing 113.28 23.13 guangzhou 114.09 22.55 shenzhen
2.GEODIST
返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在,那么命令返回空值。
可以指定单位,默认是米
* m 米 * km 千米 * mi 英里 * ft 英尺
# 北京到天津的直线距离
127.0.0.1:6379> geodist city beijing tianjin
127.0.0.1:6379> geodist city beijing tianjin km
3.GEOPOS
从key里返回所有给定位置元素的位置(经度和纬度)。
127.0.0.1:6379> geopos city beijing tianjin shanghai nanjing guangzhou shenzhen
4.GEOHASH
返回一个或多个位置元素的 Geohash 表示
127.0.0.1:6379> geohash city beijing tianjin
5.GEORADIUS
以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。可以指定单位,默认是米
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
应用:通过给定的半径距离来找附近的人等127.0.0.1:6379> georadius city 120 20 1000 km #以120,20为中心,寻找方圆1000米的城市
127.0.0.1:6379> georadius city 120 20 1000 km withdist#返回位置元素的同时,将位置元素和中心之间的距离一并返回
127.0.0.1:6379> georadius city 120 20 1000 km withcoord#将位置信息和经度纬度一并返回
127.0.0.1:6379> georadius city 120 20 1000 km withcoord count 1#选取前1个匹配的元素
127.0.0.1:6379> georadius city 120 20 1000 km withcoord asc#从近到远
127.0.0.1:6379> georadius city 120 20 1000 km withcoord desc#从远到近
6.GEORADIUSBYMEMBER
找出位于指定元素周围的其他元素127.0.0.1:6379> georadiusbymember city beijing 1000 km
127.0.0.1:6379> georadiusbymember city beijing 300 km
GEO 底层的实现原理其实就是 Zset!我们可以使用Zset命令来操作geo!。
127.0.0.1:6379> zrange city 0 -1
127.0.0.1:6379> zrem city tianjin
127.0.0.1:6379> zrange city 0 -1