1. redis GEO数据结构,存储经纬度,基本用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GEO数据结构
GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有:

GEOADD: 添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)

GEODIST: 计算指定的两个点之间的距离并返回

GEOHASH: 将指定member的坐标转为hash字符串形式并返回

GEOPOS: 返回指定member的坐标

GEORADIUS: 指定圆心、半径,找到该圆内包含的所有member,并按照与圆心之间的距离排序后返回。6.2以后已废弃

GEOSEARCH: 在指定范围内搜索member
2. 数据导入
1. 查数据库
2. 根据typeId分组
3. typeId做key,shopId做member,存入Redis,并按照与指定点之间的距离排序后返回。范围可以是圆形或矩形。6.2.新功能

GEOSEARCHSTORE: 与GEOSEARCH功能一致,不过可以把结果存储到一个指定的key。6.2.新功能
  1. 数据导入:将店铺坐标信息存入Redis
    1. 查询
    2. 分组(按店铺类型id分组)
    3. 将店铺类型id作为key存入Redis
  2. 按店铺类型id分组的办法:
1
2
3
4
//查村店铺信息  
List<R> list = shopService.list();
//按类型分组
Map<Long, List<R>> listMap = list.stream().collect(Collectors.groupingBy(R::getTypeId));
  1. 按距离分页
    1. 判断有无坐标
    2. 计算分页参数
    3. 从Redis查询数据
    4. 解析出shopid与距离
    5. 从数据库查询shopList
    6. 拼装距离
    7. 返回