Redis 地理位置信息功能
Redis 在 3.2 版本就新增了 GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。
GEO 功能是 Redis 的另一位作者 Matt Stancliff 借鉴 NoSQL 数据库 Ardb 实现的。
基础 API
- 增加地理位置信息:
geoadd key longitude latitude member [longitude latitude member ...]
longitude
、latitude
、member
分别是该地理位置的经度、纬度、成员- 示例:
geoadd cities:locations 116.28 39.55 beijing
- 获取地理位置信息:
geopos key member [member ...]
- 获取两个地理位置的距离:
geodist key member1 member2 [unit]
- 单位:
m
(meters)、km
(kilometers)、mi
(miles)英里、ft
(feet)尺
- 单位:
- 获取指定位置范围内的地理信息位置集合
1 | georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key] |
georadius
和georadiusbymember
两个命令的作用是一样的georadius
命令的中心位置给出了具体的经纬度,georadiusbymember
只需给出成员- 可选项:
withcoord
:返回结果中包含经纬度withdist
:返回结果中包含离中心节点位置的距离withhash
:返回结果中包含geohash
COUNT count
:指定返回结果的数量asc|desc
:返回结果按照离中心节点的距离做升序或者降序store key
:将返回结果的地理位置信息保存到指定键storedist key
:将返回结果离中心节点的距离保存到指定键
- 示例:距离北京 150 公里以内的城市
georadiusbymember cities:locations beijing 150 km
- 删除地理位置信息:
zrem key member
- GEO 没有提供删除成员的命令
- GEO 的底层实现是
zset
,所以可以借用zrem
命令实现对地理位置信息的删除
参考资料
- 付磊, 张益军著.Redis 开发与运维.机械工业出版社.2017
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小谷的编程随笔空间!
评论