黑马点评:缓存商户类型shopType的List和String实现方式

1、缓存商户类型shopType到redis 的String实现方式

 

1、分析思路

 

(1)String的实现思路没啥好说的,最重要的一点是从数据库取数据出来的时候,记得用sort去做升序处理。

 

2、上代码

 

@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
    @Autowired
    private ShopTypeMapper shopTypeMapper;
    @Autowired
    private StringRedisTemplate redisTemplate;

        @Override
        public Result getList() {
            // 流程一:从redis中查询商铺类型,判断商户类型是否存在
            String shopTypeJson = redisTemplate.opsForValue().get("cache:shopType");
            // 流程二:如果商户类型存在,直接转化成字符串返回给前端
            if (StrUtil.isNotBlank(shopTypeJson)){
                String jsonStr = JSONUtil.toJsonStr(shopTypeJson);
                return Result.ok(jsonStr);
            }
            // 流程三:如果商户类型不存在 打到数据库查询然后将数据按照sort进行升序排序,判断查询的内容是否存在
            // 手写sql
            List<ShopType> shopTypeList = shopTypeMapper.getList();
            // mp写法
            //List<ShopType> typeList = this.query().orderByAsc("sort").list();

            // 流程四:如果不存在,返回错误信息
            if (shopTypeList==null){
                return Result.fail("商铺分类信息不存在");
            }
            // 流程五:同时,将商铺类型信息保存到redis,需要将List<ShopType>对象转化成字符串,同时设置30分钟有效期
            redisTemplate.opsForValue().set("cache:shopType",shopTypeList.toString(),30L, TimeUnit.MINUTES);
            // 流程六:如果存在,将商铺信息返回给前端
            return Result.ok(shopTypeList);
        }

}

 

3、数据效果

 

5c94eb95ff2141c583d6a5188e8250e8.png

 

 

 

2、缓存商户类型shopType到redis 的List实现方式

 

1、分析思路

 

(1)List的实现思路跟String的区别一:流程一中,我们从redis取数据的时候,取数据的方向要跟存数据的方向相反,即你存数据的时候从左边存的,那么取的时候要从右边取;取数据的时候,通过循环将redis里面的List数据读取出来,放在一个新的集合里面stringList里面。

(2)List的实现思路跟String的区别二:流程二中,判断redis是否有缓存商铺类型数据,是通过判断stringList.size是否>0进行判断。

(3)List的实现思路跟String的区别三:从数据库中取出的List<ShopType>对象,需要进行遍历,然后将每一个ShopType对象转化成字符串,再存进Redis里面。

 

2、上代码

 

@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
    @Autowired
    private ShopTypeMapper shopTypeMapper;
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Override
    public Result getList() {
        // 流程一:从redis中查询商铺类型,判断商户类型是否存在
        // "cache:shopTypeList"为商铺类型存入redis的的key
        //  放的时候使才左边一个一个放,取出数据的顺序是从右边一个一个取出来,死循环取出数据,放在一个集合里面
        List<String> stringList = new ArrayList<>();
        String shopTypeJson;
        while ((shopTypeJson=redisTemplate.opsForList().rightPop("cache:shopTypeList"))!=null){
            stringList.add(shopTypeJson);
        }

        // todo 流程二:如果存储商户类型的集合里面有长度,直接将集合转化成字符串返回给前端
        if (stringList.size()>0) {
            return Result.ok(stringList.toString());
        }

        // 流程三:如果商户类型不存在 打到数据库查询然后将数据按照sort进行升序排序,判断查询的内容是否存在
        // 手写sql
        List<ShopType> shopTypeList = shopTypeMapper.getList();
        // mp写法
        //List<ShopType> typeList = this.query().orderByAsc("sort").list();

        // 流程四:如果不存在,返回错误信息
        if (shopTypeList == null) {
            return Result.fail("商铺分类信息不存在");
        }
        //   流程五:同时,将商铺类型信息保存到redis,需要将List<ShopType>对象转化成字符串,同时设置30分钟有效期
        //    从左边一个一个加进去
        for (ShopType shopType : shopTypeList) {
            redisTemplate.opsForList().leftPush("cache:shopTypeList",shopType.toString());
        }
        redisTemplate.expire("cache:shopTypeList",30, TimeUnit.MINUTES);
        // 流程六:如果存在,将商铺信息返回给前端
        return Result.ok(shopTypeList);
    }

}

 

3、数据效果

 

df2e9d1b391e49668e43529997df5fa7.png

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值