简介
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作。
Redis >= 3.2.0 版本启用
命令
GEOADD
GEOADD 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
语法:
GEOADD key longitude latitude member [longitude latitude member ...]
GEODIST
GEODIST 用于返回两个给定位置之间的距离。
语法:
GEODIST key member1 member2 [m|km|ft|mi]
距离单位说明:
**
- m :米,默认单位。
- km :千米。
- mi :英里。
- ft :英尺。
注意:假设地球是一个完美的球体,则计算距离,因此在极端情况下误差可能高达0.5%。
GEOPOS
GEOPOS 用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
语法:
GEOPOS key member [member ...]
GEORADIUS、GEORADIUSBYMEMBER
GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUSBYMEMBER 和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。
语法:
# GEORADIUS
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
# GEORADIUSBYMEMBER
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
选项说明:
WITHDIST
:在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。WITHCOORD
:将位置元素的经度和维度也一并返回。WITHHASH
::以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。COUNT
:限定返回的记录数。ASC
: 查找结果根据距离从近到远排序。DESC
: 查找结果根据从远到近排序。
总结
- Geo 属于
zset
类型:type geo_key -> zset
- 注意:没有
GEODEL
命令,因为可以使用ZREM
来删除元素。地理位置索引结构只是一个排序集。 - 关于地球模型:由于距离是采用 Haversine 公式(假设地球是个完美的球体),但实际的地基并非完美球体,所以存在一定的误差,极端情况下误差率高达 0.5%