当redis 逐渐因为自己是内存数据库,速度快,支持了多种类型,支持了持久化,原子性等一系列优点而广泛被互联网使用之后。
redis也开始了丰富的其他功能。在redis3.0之后开始支持集群模式。在3.2的版本中增加了最大的功能就是支持GEO类型的数据。
这也就是redis为什么可以实现摇一摇和附近的人的原因。
首先大概了解下GEO类型的基本功能。

其实在redis底层中GEO类型存储依靠的还是zset(有序集合),和 set(集合)。
首先让我们了解下geo的命令:
1.
添加地理位置命令 geoadd:
geoadd 可以添加多个地理位置:
geoadd key longitude latitude member [longitude latitude member ...]
例:
geoadd city 120.20000 30.26667 hangzhou 116.41667 39.91667 beijing 121.47 31.23 shanghai

2.
获取地理位置 geopos:
geopos 指令可以获取集合中任意元素的经纬度坐标,可以一次获取多个。
例:
geopos city hangzhou beijing shanghai

3.
计算位置 geodist:
距离单位可以是 m、km、ml、ft,分别代表米、千米、英里和尺。
例:
geodist city shanghai hangzhou km
geodist city beijing hangzhou m

4.
查询附近位置命令 georadiusbymember :
使用GEORADIUSBYMEMBER命令即可查询附近的位置
例:
例如查找距离杭州300km以内的城市的10个城市按距离排序
georadiusbymember city hangzhou 300 km withcoord withdist withhash asc count 10
说明:
withdist : 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。距离的单位和用户
withcoord:将位置元素的经度和维度也一并返回。
withhash: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。
asc: 根据中心的位置, 按照从近到远的方式返回位置元素。DESC :根据中心的位置照
给定的范围单位保持一致。
从远到近的方式返回位置元素。

5.
获取元素的 hash 值 geohash:
例:
geohash city hangzhou

6.
通过底层结构获取经纬度 zset:
例:
zrange city 0 -1
zrange city 0 -1 withscores





