跳转至

附近的商家如何加载

一、场景

1000 万商家,按经纬度,找附近 5 公里。

二、方案

1. Redis GEO

Redis 自带 GEO:

GEOADD shops 经度 纬度 商家ID
GEORADIUS shops 经度 纬度 5 km

原理

  • 底层是 ZSet。
  • geohash 编码。
  • 范围查。

优点

  • 简单。
  • 快。

缺点

  • 范围查不够精确。
  • 大数据量可能慢。

三、方案二:Elasticsearch

ES 支持 geo_point:

{
  "location": {
    "lat": 39.9,
    "lon": 116.4
  }
}

查询:

{
  "query": {
    "geo_distance": {
      "distance": "5km",
      "location": "39.9,116.4"
    }
  }
}

优点

  • 支持排序、过滤。
  • 大数据量。

缺点

  • 重。

四、方案三:geohash + 数据库

geohash 把区域编码成字符串,前缀匹配。

code = "wx4g0"

查前缀相同的。

五、怎么选

  • 简单:Redis GEO。
  • 复杂:ES。
  • 1000 万:Redis + ES 混合。

一句话

Redis GEO 简单,ES 适合大数据量和复杂查询。