【Redis】Redis实战:黑马点评之附近商户

Redis实战:黑马点评之附近商户

注:关于GEO的知识笔者整理到了另一篇文章中:【Redis】Redis高级:GEO&BitMap&HyperLogLog,这里只讲解相关代码的编写

1 导入店铺数据到GEO

当我们在点击任意一种商户分类(比如美食)之后,就会出现一系列的商家,用户可以按照多种排序方式对商家进行排序,而我们此时需要完成的功能是按照距离进行排序,这时就需要使用GEO数据类型

在这里插入图片描述

前端发起查询时,会发送商户类型、页码、当前用户的经度和维度四个参数,我们只需要以该经纬度为圆心,分页查询出一定范围内指定类型的商户信息然后即可,geo会自动帮我们完成排序

这里geo的key中需要携带上商户的分类信息,因为前端发起的查询指定商户的类型,而geo中又没有办法保存相应的类型信息,因此最好将商户的类型设计到geo的key中,按类型分别来保存geo

为了尽量节省内存空间,geo的member我们只需要保存商户id即可。

首先我们需要做的事,就是将所有商户的位置信息保存在redis中,这里我们可以通过一个测试类来完成:

@Test
public void loadShopData(){
   
    //从数据库中查询出所有商户信息
    List<Shop> shopList = shopService.list();
    //以商户类型分类,将商户信息保存在map中
    Map<Long, List<Shop>> shopMap = shopList.stream().collect(Collectors.groupingBy(Shop::getTypeId));
    //分批写入redis
    for (Map.Entry<Long, List<Shop>> shopEntry : shopMap.entrySet()) {
   
        //组装key
        String key = RedisConstants.SHOP_GEO_KEY + shopEntry.getKey();
        //获取特定类型的商户的集合
        List<Shop> value = shopEntry.getValue();
        //新建一个地理信息集合中
        List<RedisGeoCommands.GeoLocation<String>> locations = new ArrayList<>(value.size());
        //遍历并插入
        for (Shop shop : value) {
   
            //将商户的信息插入到地理信息集合中
            locations.add(
                new RedisGeoCommands.GeoLocation(
                    shop.getId
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值