1. 基本介绍
- Redis的Geospatial数据类型允许用户存储地理空间的位置信息,如经度和纬度,以及与之相关的数据。
- 这些数据存储在有序集合(sorted sets)中,每个成员的排序值(score)是经过编码的Geohash值,这有助于进行距离计算和范围查询。
2. 应用场景
- 查找附近的地点:例如,查找附近的商店、餐馆或加油站。
- 物流和配送:确定哪个仓库或配送中心离客户最近,从而优化配送路线。
- 社交应用:查找附近的朋友或用户。
3、底层编码
3.1对经度进行编码
坐标116
次数 | 最小 | 中间 | 最大 | 区间 | 编码 |
1 | -180 | 0 | 180 | [0,180] | 1 |
2 | 0 | 90 | 180 | [90,180] | 1 |
3 | 90 | 135 | 180 | [90,135] | 0 |
4 | 90 | 112.5 | 135 | [112.5,135] | 1 |
5 | 112.5 | 123.75 | 135 | [112.5,123.75] | 0 |
3.2对维度进行编码
对纬度进行编码 40
次数 | 最小 | 中间 | 最大 | 区间 | 编码 |
1 | -90 | 0 | 90 | [0,90] | 1 |
2 | 0 | 45 | 90 | [0,45] | 1 |
3 | 0 | 22.5 | 45 | [22.5,45] | 0 |
4 | 22.5 | 33.75 | 45 | [33.75,45] | 1 |
5 | 33.75 | 39.375 | 45 | [39.375,45] | 0 |
4. 主要命令
GEOADD:将指定的地理空间位置(经度、纬度、成员)添加到Redis中的键中。
- 语法:
GEOADD key longitude latitude member [longitude latitude member ...]
- 示例:
GEOADD locations 13.361389 38.115556 "Palermo"
- 语法:
GEOPOS:返回一个或多个成员的地理位置(经度和纬度)。
- 语法:
GEOPOS key [member [member ...]]
- 示例:
GEOPOS locations Palermo Catania
- 语法:
GEODIST:计算存储在Redis地理空间索引中的两个成员之间的距离。
- 语法:
GEODIST key member1 member2 [M | KM | FT | MI]
- 示例:
GEODIST locations Palermo Catania KM
- 语法:
GEORADIUS:查询地理位置集合中的元素,返回与给定中心坐标距离不超过指定半径的所有位置元素。
- 语法:
GEORADIUS key longitude latitude radius m|km|mi|ft [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE destination-key] [STOREDIST destination-key]
- 示例:
GEORADIUS taxis 13.37 38.11 50 km WITHDIST WITHCOORD
- 语法:
GEOHASH:返回一个或多个成员的Geohash值。
- 语法:
GEOHASH key [member [member ...]]
- 示例:
GEOHASH locations Palermo Catania
- 语法:
5. 坐标系统
- Redis的Geospatial使用了WGS84坐标系来存储和操作地理位置信息。WGS84是一种国际通用的地心坐标系,也是GPS原始坐标体系。
- 有效的经度介于-180度至180度之间,而有效的纬度介于-85.05112878度至85.05112878度之间。
6. 性能
- Redis的Geospatial操作性能与有序集合的基本操作性能相似。
- 查找附近的地点和计算距离等操作都可以通过Redis的高性能特性快速完成。