需求为获取附近的店铺的推荐信息,这就要求获取地理位置,在数据库中存储有如下格式的地理信息
x和y分别表示店铺的地理坐标,导入到redis 中,具体代码如下:
这里主要说明几点:
1.获取数据库中的全部数据,可以使用 service.list()的方法
2.stream流的collect的方式,可以自动返回一个按照指定字段分类的结果集合
3.在想redis中插入数据的时候采用批量插入的方式也就是说插入的是
List<RedisGeoCommands.GeoLocation<String>> locations
@Test
void changeGeo(){
//查询店铺信息
List<Shop> shops = shopService.list();
//根据shop的类型来分类
Map<Long, List<Shop>> shopCollect = shops.stream().
collect(Collectors.groupingBy(Shop::getTypeId));
//分批写入redis
for (Map.Entry<Long, List<Shop>> entry : shopCollect.entrySet()) {
//获取类型id
String key = RedisConstants.SHOP_GEO_KEY + entry.getKey();
//获取同类型的店铺集合
List<Shop> value = entry.getValue();
List<RedisGeoCommands.GeoLocation<String>> locations =
new ArrayList<>(value.size());
for (Shop shop :value) {
locations.add(new RedisGeoCommands.GeoLocation<>(
shop.getId().toString(),
new Point(shop.getX(), shop.getY())
));
}
redisTemplate.opsForGeo().add(key,locations);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/88837.html