【redis】redis Geospatial

发布于:2024-07-03 ⋅ 阅读:(10) ⋅ 点赞:(0)

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的高性能特性快速完成。

网站公告

今日签到

点亮在社区的每一天
去签到