项目中将热点数据存入redis中,集合类

总言:

实现项目主页中重点商铺分类的热点数据缓存写入redis数据库,提升项目热点数据访问的速度,减小数据库压力,难点在于获取缓存和写入缓存中json字符串和list集合对象的转换。
在这里插入图片描述

1.控制层,注释掉的为原先没用redis缓存的调用方式(MybatisPlus实现)

@RestController
@RequestMapping("/shop-type")
public class ShopTypeController {
    @Resource
    private IShopTypeService typeService;

    @GetMapping("list")
    public Result queryTypeList() {
//        List<ShopType> typeList = typeService
//                .query().orderByAsc("sort").list();
//        return Result.ok(typeList);

        return typeService.queryAllType();
    }
}

2.业务层实现queryAllType()方法业务逻辑,个人感觉难点在于获取缓存和写入缓存中json字符串和list集合对象的转换。(注解写清楚了):

@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private ShopTypeMapper shopTypeMapper;
    @Override
    public Result queryAllType() {
        // 1. 查询redis中店铺类型的数据
        String shopTypeJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_TYPE_KEY);

        // 2. 判断是否存在
        ObjectMapper objectMapper = new ObjectMapper();
        List<ShopType> shopTypeList = null; // 用于存储店铺类型数据

        if (StrUtil.isNotBlank(shopTypeJson)) {
            // 3. 存在,解析数据
            try {
                shopTypeList = objectMapper.readValue(shopTypeJson,List.class);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }

        if (shopTypeList == null) {
            // 4. 不存在,访问数据库查询数据
            shopTypeList = shopTypeMapper.selectList(null);

            if (shopTypeList.isEmpty()) {
                // 5. 数据库中也不存在该数据
                return Result.fail("没有该店铺类型信息");
            }

            // 6. 存在,返回数据,然后将数据写入redis
            try {
                stringRedisTemplate.opsForValue()
                        .set(CACHE_SHOP_TYPE_KEY, objectMapper.writeValueAsString(shopTypeList),
                                CACHE_SHOP_TYPE_TTL, TimeUnit.MINUTES);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }

        // 7. 返回数据
        return Result.ok(shopTypeList);
    }

}

3.实现结果

(1)游览器开发控制台已经成功获取数据了,成功
在这里插入图片描述
(2)查看redis缓存中有没有key-value;
在这里插入图片描述
(3)查看redis中json数据
在这里插入图片描述
成功!!
在这里插入图片描述
这个速度提升了,但是图片太小可能看不清楚。

总结:

在写业务时,不论是简单的CRUD(增删改查)还是难的的业务逻辑,在写代码之前先把业务逻辑过程写出来,接着一个个完善,这是最合理写代码过程,避免中途大脑宕机用遗忘逻辑过程,加油吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值