redis学习(7)—操作geohash命令

自redis 3.2开始,redis基于geohash和zset提供了地理位置相关功能
什么是Geohash
Geohash是一种地址编码,它能把二维的经纬度编码成一维的字符串。比如,世界之窗的编码是ws101xy1rp0
Redis Geo模块包含了以下6个命令:

1、GEOADD命令
将给定的位置对象(纬度、经度、名字)添加到指定的key
注:
1)这里我们采用的是中文存储,如果出现了乱码,redis命令的登录命令加上 –raw
例如:./redis-cli –raw
2)查看某个地址的经纬度,建议用http://www.gpsspg.com/maps.htm

115.99956025097654
39.8807058838189
天门山森林公园

115.98857392285154
38.94226425604525
白洋淀景区

114.31453217480467
37.902432972682355
封龙山风景区

112.18318451855467
37.20457037066391
平遥古城

106.32129181835936
35.382832693671894
六盘山国家森林公园

103.91940583203123
33.183475692241416
九寨沟景区

例子:
geoadd scenery 115.99956025097654 39.8807058838189 “天门山森林公园” 115.98857392285154 38.94226425604525 “白洋淀景区” 114.31453217480467 37.902432972682355 “封龙山风景区” 112.18318451855467 37.20457037066391 “平遥古城” 106.32129181835936 35.382832693671894 “六盘山国家森林公园” 103.91940583203123 33.183475692241416 “九寨沟景区”
6
zrange scenery 0 -1
九寨沟景区
六盘山国家森林公园
平遥古城
封龙山风景区
白洋淀景区
天门山森林公园

2、GEOPOS命令
从key里面返回所有给定位置对象的位置(经度和纬度)
例子:
geopos scenery 九寨沟景区
103.91940683126449585
33.18347568588529128

3、GEOHASH命令
返回一个或多个位置对象的geohash
例子:
geohash scenery 九寨沟景区
wmcuu8zgc80

4、GEODIST命令
geodist key member1 member2 [unit]
返回两个给定位置之间的距离:
指定单位的参数unit必须是以下单位的其中一个:
m:表示单位为米
km:表示单位为千米
mi:表示单位为英里
ft:表示单位为英尺
例子:
geodist scenery 九寨沟景区 天门山森林公园 km
1309.7552

5、GEORADIUS命令
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
给定一个经纬度,然后以半径为中心,计算出半径内的数据
WITHDIST:在返回位置元素的同时,将位置元素与中心之间的距离也一并返回。距离的单位和用户给定的范围单位保持一致
WITHCOORD:将位置元素的经度和纬度也一并返回
WITHHASH:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值。这个选项主要用于底层应用或者调试,实际中的作用并不大
ASC、DESC:排序方式,按照距离的升序、降序排列
STORE key1:把结果存入key1,zset格式,以坐标hash为score
STOREDIST key2:把结果存入key2,zset格式,以距离为score
例子:
georadius scenery 117.1675442597656 39.08951124940695 500 km WITHDIST WITHCOORD count 10
白洋淀景区
103.1933
115.98857492208480835
38.94226330577817663
天门山森林公园
133.4033
115.99956125020980835
39.88070579420602968
封龙山风景区
281.2541
114.31453317403793335
37.90243197097675676
平遥古城
483.6810
112.18318551778793335
37.20457000666640113

6、GEORADIUSBYMEMBER命令
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER和GEORADIUS一样的功能,区别在于,GEORADIUS是以经纬度去查询,而GEORADIUSBYMEMBER是以当前集合中的某个member元素来查询
例子:
georadiusbymember scenery “白洋淀景区” 200 km WITHDIST WITHCOORD count 10
白洋淀景区
0.0000
115.98857492208480835
38.94226330577817663
天门山森林公园
104.3838
115.99956125020980835
39.88070579420602968
封龙山风景区
186.1563
114.31453317403793335
37.90243197097675676