1、实现效果
2.思路:
由于数据库中图标类型有个sort字段,所以需要对图标进行排序。因此可以用Zset类型将存储图标类型,以type-list为key,shopType为value,sort数据为分数,用Zset自带的排序命令获得排序后的数据。具体流程为:
- 查询Redis中是否含有图标类型数据
- 如果查询到数据,将数据从缓存中取出,返回给前端接受
- 如果查询不到数据,则到数据库中查询
- 将数据库查询到的数据保存的Redis中
3.代码
@Override
public List<ShopType> queryTypeList() {
List<ShopType> list= new ArrayList<>();
//1.到缓存中查询
Set<String> values = stringRedisTemplate.opsForZSet().rangeByScore("type-list", 0, -1);
if (values.size()!=0) {
//2.获取查询到的数据并返回
for (String value : values) {
ShopType shopType = JSONUtil.toBean(value, ShopType.class);
list.add(shopType);
}
return list;
}
//3.缓存中查询不到,在数据库中查询
list = query().orderByAsc("sort").list();
//4.将查询到数据存入redis
for (ShopType shopType : list) {
stringRedisTemplate.opsForZSet().add("type-list",JSONUtil.toJsonStr(shopType),shopType.getSort());
}
return list;
}