Redis应用(5)将数据库中存储的数据转换为Geo形式

导读:本篇文章讲解 Redis应用(5)将数据库中存储的数据转换为Geo形式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

需求为获取附近的店铺的推荐信息,这就要求获取地理位置,在数据库中存储有如下格式的地理信息

Redis应用(5)将数据库中存储的数据转换为Geo形式

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!