Redis提供了GEO功能,也就是地理信息定位功能。通过Redis中的GEO功能,我们可以很方便的通过经纬度来计算两个地理位置之间的距离。所以我们在实际的开发中,可以使用Redis中的GEO功能,来实现和附近位置有关的功能。下面我们详细介绍Redis中的GEO功能的相关命令。
命令
- 增加地理信息
geoadd key longitude latitude member [longitude latitude member ...]
geoadd命令执行的时候,是需要添加经纬度的,并且geoadd命令执行成功后返回值会等于添加元素的个数,如果添加的元素已经存在了,则返回值为0。除此之外geoadd命令支持批量添加元素。
- 获取地理位置信息
geopos key member [member ...]
- 获取两个地理位置的距离
geodist key member1 member2 [unit]
geodist命令中的unit参数指的是距离的单位。它们主要有4种选项:
- m:表示的单位是米。
- km:表示的单位是千米。
- mi:表示的单位是英里。
- ft:表示的单位是尺。
- 获取指定位置范围内的地理信息位置集合
georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
georadius命令的参数比较多,下面我们详细介绍一下该命令的参数。
- withcoord:返回的结果中包括经纬度。
- withdist:返回的结果中包含离中心节点位置的距离。
- withhash:返回的结果中包含geohash。
- count:返回结果的数量。
- asc|desc:返回结果离中心节点距离的升序或降序。
- store key:将返回结果的地理位置信息保存到指定的键中。
- storedist key:将返回结果离中心节点的距离保存到指定键中。
除了使用georadius命令外,我们还可以使用georadiusbymember命令,该命令和georadius命令的区别是前者在获取位置集合中需要指定的中心节点是元素名字,而后者则需要输入中心节点的经纬度,除此之外,这两个命令没有其它区别。
- 获取geohash
geohash key member [member ...]
在Redis中我们可以通过geohash将经纬度转换成字符串。
在Redis中GEO信息会保存到zset类型中。
下面我们看一下geohash的特点:
- 字符串越长,表示的位置更精确。
- 字符串越相近,表示它们之间的距离越近。
下面为geohash长度与精度的对应关系。
geohash长度 | 精确度(km) |
---|---|
1 | 2500 |
2 | 630 |
3 | 78 |
4 | 20 |
5 | 2.4 |
6 | 0.61 |
7 | 0.076 |
8 | 0.019 |
9 | 0.002 |
- 删除地理位置信息
zrem key member [member ...]
Redis中并没有提供删除元素的命令,但我们知道Redis将地理位置信息保存到了zset中,所以我们可以直接使用zset中的命令删除指定元素,也就是zrem命令。
上述内容就是Redis中的GEO功能,如有不正确的地方,欢迎留言,谢谢。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2018/06/10 19:36