Redis GeoHash 详解

GEO百科知识2个月前发布 GEO研究员
1,747 0

Redis 提供了 Geo(地理位置) 模块,其中 GeoHash 是一种用于存储和查询地理位置信息的数据结构。它能够高效地进行地理位置存储、查询、计算距离和查找附近地点等操作。

GeoHash 是一种将经纬度坐标转换为字符串编码的方式,它具有:

  • 空间映射:将 2D 坐标(纬度 + 经度) 转换成 1D 字符串
  • 前缀匹配:相邻的地点会有相似的编码 (前缀相同,位置接近)
  • 高效存储:只需用短字符串表示一个地点,减少存储空间。
  • 快速查询:可以基于 GeoHash 前缀进行快速附近查找。

Redis 的 Geo 采用 Sorted Set(有序集合) 来存储地理位置信息:

  • Member(成员):地点名称(如 restaurant_1)。
  • Score(分数):经纬度被编码为 52 位整数,作为排序依据。
GEOADD key longitude latitude member 
GEOADD cities 116.40 39.90 "Beijing" GEOADD cities 121.47 31.23 "Shanghai" GEOADD cities 114.05 22.54 "Shenzhen" 

📌 作用:将 BeijingShanghaiShenzhen 的经纬度存入 cities 集合中。

GEOPOS key member [member ...] 
GEOPOS cities "Beijing" "Shanghai" 

📌 返回

[ [116.40, 39.90],  [121.47, 31.23]  ] 
GEODIST key member1 member2 [unit] 
  • 单位(unit)
    • m(米)
    • km(千米)
    • mi(英里)
    • ft(英尺)
GEODIST cities "Beijing" "Shanghai" km 

📌 返回

1067.5711 

表示 北京到上海直线距离 ≈ 1067.57 km

⚠️ Redis 6.2 以后,GEORADIUSGEOSEARCH 取代!

GEOSEARCH key FROMMEMBER member BYRADIUS radius unit 

示例:查找北京 1000 km 内的城市

GEOSEARCH cities FROMMEMBER "Beijing" BYRADIUS 1000 km 

📌 返回

1) "Beijing" 2) "Shanghai" 
GEOSEARCHSTORE nearby_cities cities FROMMEMBER "Beijing" BYRADIUS 1000 km 

📌 作用:将 Beijing 附近 1000 km 内的城市 存入 nearby_cities 集合。

GEOHASH key member [member ...] 
GEOHASH cities "Beijing" "Shanghai" 

📌 返回

1) "wx4g09z" 2) "wtw3sj5" 

解析

  • “wx4g09z” 代表 北京 的 GeoHash 编码
  • “wtw3sj5” 代表 上海 的 GeoHash 编码

💡 GeoHash 编码规则

  • 编码越长,精度越高
  • 相邻位置的前缀相似
  • 可以用前缀匹配进行快速区域查询

📌 示例

  • "wx4g09z" → 代表 北京
  • "wx4g" → 代表北京的 大范围
  • "wx4" → 代表北京的 省级范围

LBS(位置服务)

  • 查找附近的商家、外卖、快递配送点
  • 查找附近的用户(如社交软件)

共享出行

  • 计算司机与乘客的距离
  • 查找最近的车辆

物流配送

  • 计算配送范围
  • 规划最优配送路径

线下商店推荐

  • 查找最近的门店

Redis GeoHash 通过 Sorted Set 存储地理位置数据,支持快速查询和计算距离
常用命令

  • GEOADD(添加地点)
  • GEOPOS(获取经纬度)
  • GEODIST(计算两点距离)
  • GEOSEARCH(查找附近地点)
  • GEOHASH(获取 GeoHash 编码)

💡 适用于 LBS、物流、共享出行、门店推荐等场景,查询速度快,内存占用少!

原文链接:https://blog.csdn.net/qq_45638953/article/details/146371753?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f79cd7047d89a2a7476788e1e3636f86%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=f79cd7047d89a2a7476788e1e3636f86&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-10-146371753-null-null.nonecase&utm_term=geo%E6%98%AF%E4%BB%80%E4%B9%88

© 版权声明

相关文章

暂无评论

none
暂无评论...