黑马点评练习题-给店铺类型查询业务添加缓存(String和List实现)

目录

一、前言

二、需求

三、String实现

四、List实现


一、前言

这是黑马点评实战篇-商户查询缓存-0.3缓存练习题分析,练习给店铺类型查询业务添加缓存。这里我自己是通过String实现的,当然在网上查询也能够找到其他的实现方式。String实现我会展示自己写的代码(算简单一点但是严格按照之前查询店铺缓存的来),List实现我会转载我认为其他大佬写的比较好的(实现起来会复杂一点)

二、需求

修改ShopTypeController中的queryTypeList方法,添加查询缓存

三、String实现

将ShopTypeController改为如下图所示:

在IShopTypeList中创建queryTypeList并加上注释

进入实现类中实现queryTypeList方法(核心就是完成这个实现方法)

整个实现方法完成的效果如下图:(记得注入StringRedisTemplate,在常量类中加上CACHE_SHOP_TYPE_KEY)

整个实现方法的参考代码如下:

复制代码
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 查询所有商铺类型
     */
    public Result queryTypeList() {
        //用String实现,opsForValue写法
        //public static final String CACHE_SHOP_TYPE_KEY = "cache:shopType:";
        String key = CACHE_SHOP_TYPE_KEY;
        //1.从redis查询商铺类型缓存
        String shopTypeJson = stringRedisTemplate.opsForValue().get(key);
        //2.判断是否存在
        if (StrUtil.isNotBlank(shopTypeJson)){
            //3.存在,直接返回
            List<ShopType> shopTypeList = JSONUtil.toList(shopTypeJson, ShopType.class);
            return Result.ok(shopTypeList);
        }
        //4.不存在,查询数据库  MybatisPlus的query()拿来用
        List<ShopType> shopTypeList = query().orderByAsc("sort").list();
        //5.数据库中不存在,返回错误信息
        if (shopTypeList == null){
            return Result.fail("商铺类型不存在!");
        }
        //6.数据库中存在,写入redis
        String jsonStr = JSONUtil.toJsonStr(shopTypeList);
        stringRedisTemplate.opsForValue().set(key, jsonStr);
        //7.返回
        return Result.ok(shopTypeList);
    }
}

启动服务测试观察DataGrip效果如下:

四、List实现

这里我转载其他大佬的博客,大家自行了解

【黑马点评】实战篇-作业-店铺类型缓存-List实现_黑马点评作业-CSDN博客