大众点评项目 商品目录 添加Redis缓存
- 需求:基于Redis查询商品信息
- 业务实现
- 给商品添加缓存
- 给店铺类型添加缓存
- 总结和业务流程
SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会回顾Redis实战项目 大众点评
主要依照以下几个原则
- 基础+实战的Demo和Coding上传到我的代码仓库
- 在原有基础上加入一些设计模式,stream+lamdba等新的糖
- 通过DeBug调试,进入组件源码去分析底层运行的规则和设计模式
代码会同步在我的gitee中去,觉得不错的同学记得一键三连求关注,感谢:
Redis优化-链接: RedisProject
需求:基于Redis查询商品信息
为了降低后端负载,提升读写效率和响应时间
我们可以通过缓存存取一些数据信息:存储在db的商品信息,或者前端展示的静态资源
业务实现
给商品添加缓存
以往的操作是调用了MP自带的API直接db查询
/*** 根据id查询商铺信息* @param id 商铺id* @return 商铺详情数据*/@GetMapping("/{id}")public Result queryShopById(@PathVariable("id") Long id) {return Result.ok(shopService.getById(id));
我们进入Service层去修改业务,
- 通过@Resource 注入Bean
private StringRedisTemplate stringRedisTemplate;
- 选取合适的类型存放k-V,这里我选择的是String
- 通过
JSONUtil.toBean
将我们存入Redis的JSON数据转换成相应的Shop.class
格式 - 如果查不到,就去DB查,这里就是对应的业务逻辑
@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result queryById(Long id) {String key = RedisConstants.CACHE_SHOP_KEY + id;String shopStr = stringRedisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopStr)){Shop shop = JSONUtil.toBean(shopStr, Shop.class);return Result.ok(shop);}Shop shop = getById(id);if (shop == null) {return Result.fail("店铺类型不存在!");}stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), RedisConstants.CACHE_NULL_TTL, TimeUnit.HOURS);return Result.ok(shop);}
给店铺类型添加缓存
我们进入Service层去修改业务,
- 通过@Resource 注入Bean
private StringRedisTemplate stringRedisTemplate;
- 选取合适的类型存放k-V,这里我选择的是String
- 通过
JSONUtil.toBean
将我们存入Redis的JSON数据转换成相应的Shop.class
格式,这里是List类型 - 如果查不到,就去DB查,这里就是对应的业务逻辑
@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result queryTypeList() {String key = SHOP_TYPE_KEY;List<ShopType> shopTypeList = JSONUtil.toList(stringRedisTemplate.opsForValue().get(key),ShopType.class);;log.debug("typeList: " + shopTypeList.toString());if(shopTypeList.size()==0){shopTypeList = query().orderByAsc("sort").list();log.debug("typeList: " + shopTypeList.toString());if(shopTypeList==null) {return Result.fail("没有相关信息");}stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shopTypeList), CACHE_NULL_TTL, TimeUnit.HOURS);return Result.ok(shopTypeList);}return Result.ok(shopTypeList);}
}
总结和业务流程