十四、Redis三种特殊类型之一Geospatial

一.概述

redis除了提供了五大基本数据类型String、List、Set、Hash、Zset,还有3个比较特殊的数据类型,Geospatial、Hyperloglog、Bitmap,这三个数据类型有一些比较有趣的应用场景,下面说说Geospatial,主要可以应用于跟地图相关的应用。

朋友的定位,附近的人,打车距离计算?
Redis 的 Geo 在Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!

纬度范围:-85.05112878度到85.05112878度。

经度范围:-180度到180度

两极没有经度和纬度

十四、Redis三种特殊类型之一Geospatial

二.相关命令

geoadd #将指定的地理空间位置(纬度、经度、名称)添加到指定的key中

geodist #返回两个给定位置之间的距离。

geohash #返回一个或多个位置元素的 Geohash 表示

geopos #从key里返回所有给定位置元素的位置(经度和纬度)

georadius #以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素

georadiusbymember #中心点是由给定的位置元素决定的,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素

三、geospatial类型的操作配置

1.GEOADD

指定的地理空间位置(纬度、经度、名称)添加到指定的key中,经纬度查询百度一下即可。

十四、Redis三种特殊类型之一Geospatial

127.0.0.1:6379> geoadd city 116.23 40.22 beijing
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> geoadd city 117.19 39.01 tianjin
十四、Redis三种特殊类型之一Geospatial
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
十四、Redis三种特殊类型之一Geospatial

2.GEODIST

返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在,那么命令返回空值。

可以指定单位,默认是米

* m 米    * km 千米     * mi 英里     * ft 英尺

# 北京到天津的直线距离
127.0.0.1:6379> geodist city beijing tianjin
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> geodist city beijing tianjin km
十四、Redis三种特殊类型之一Geospatial

3.GEOPOS

从key里返回所有给定位置元素的位置(经度和纬度)。

127.0.0.1:6379> geopos city beijing tianjin shanghai nanjing guangzhou shenzhen
十四、Redis三种特殊类型之一Geospatial

4.GEOHASH

返回一个或多个位置元素的 Geohash 表示

127.0.0.1:6379> geohash city beijing tianjin
十四、Redis三种特殊类型之一Geospatial

5.GEORADIUS


以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。

可以指定单位,默认是米

m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
应用:通过给定的半径距离来找附近的人等

127.0.0.1:6379> georadius city 120 20 1000 km #以120,20为中心,寻找方圆1000米的城市
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> georadius city 120 20 1000 km withdist#返回位置元素的同时,将位置元素和中心之间的距离一并返回
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> georadius city 120 20 1000 km withcoord#将位置信息和经度纬度一并返回
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> georadius city 120 20 1000 km withcoord count 1#选取前1个匹配的元素
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> georadius city 120 20 1000 km withcoord asc#从近到远
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> georadius city 120 20 1000 km withcoord desc#从远到近十四、Redis三种特殊类型之一Geospatial

6.GEORADIUSBYMEMBER


找出位于指定元素周围的其他元素

127.0.0.1:6379> georadiusbymember city beijing 1000 km
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> georadiusbymember city beijing 300  km十四、Redis三种特殊类型之一Geospatial

GEO 底层的实现原理其实就是 Zset!我们可以使用Zset命令来操作geo!。
127.0.0.1:6379> zrange city 0 -1
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> zrem city tianjin
十四、Redis三种特殊类型之一Geospatial
127.0.0.1:6379> zrange city 0 -1
十四、Redis三种特殊类型之一Geospatial