GEO 实现

2021/01/25 posted in  实践

基于位置信息服务的LBS应用访问数据是和人或者是物的一组经纬度信息,而且要能查询相邻的经纬度范围,GEO 就适合应用这样的场景

底层结构

GEO 底层就是采用Sorted Set 实现的,通过 GeoHash 编码方式对经纬度进行GeoHash编码,然后再将经纬度各自的编码组合成一个最终编码。GEO 类型吧经纬度所在的区间最为Sorted Set 中元素的权重分数,把和经纬度相关的信息作为Sorted Set 中的元素本身的值保存下来

GEO 操作

  1. GEOADD 命令:把经纬度信息和对应的一个ID记录到GEO类型中
  2. GEORADIUS 命令:根据输入的经纬度位置,查找以这个经纬度为中心的一定范围内的其他元素。

GEO操作实例

  1. 将 ID 为 33 的车辆当前的经纬度存入GEO中
    GEOADD cars:locations 116.034579 39.030452 33
  1. 查找以(116.054579,39.030452)经纬度为中心的 5 公里内的车辆信息
GEORADIUS cars:locations 116.054579 39.030452 5 km ASC COUNT 10