【Redis】2-5 基于Redis优化首页轮播图查询
目录
1. 内容概要
场景分析:
轮播图内容大部分时间是固定
类似场景:
菜单列表,子菜单列表,设备列表,商品列表,秒杀商品总数,排名列表等
使用redis缓存好处:
- 提升接口速度
- 数据库降压
1.1 总结
1.1.1 优化逻辑
首先在redis中查询轮播图缓存
- 如果不存在,数据库读取,并存入redis
- 如果存在,使用redis缓存数据
1.1.2 更新方式
- 后台运营系统,一旦广告(轮播图)发生更改,可以直接删除缓存
- 定时重置。如每日凌晨三点重置
- 过期时间。时间过期后有限展示优先级最高排序
1.1.3 代码
技巧:List<T> 和 String 相互转换
public IMOOCJSONResult carousel() {
List<Carousel> list = new ArrayList<>();
String carouselStr = redisOperator.get("carousel");
if (StringUtils.isBlank(carouselStr)) {
list = carouselService.queryAll(YesOrNo.YES.type);
redisOperator.set("carousel", JsonUtils.objectToJson(list));
} else {
list = JsonUtils.jsonToList(carouselStr, Carousel.class);
}
return IMOOCJSONResult.ok(list);
}
/**
* JsonUtils.jsonToList方法
*
* 将json数据转换成pojo对象list
* @param jsonData
* @param beanType
* @return
*/
public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}