1.3レベルの分類ビジネスコード変換
元の1つのメソッドを2つのメソッドに変更します。コードは次のとおりです。
@Override
public Map<String, List<Catelog2Vo>> getCatalogJson(){
//先从缓存中尝试获取,若为空则从数据库中获取然后放入缓存
ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
String catalogJson = opsForValue.get("catalogJson");
if(StringUtils.isEmpty(catalogJson)){
Map<String, List<Catelog2Vo>> catalogJsonFromDb = getCatalogJsonFromDb();
String str = JSON.toJSONString(catalogJsonFromDb);
opsForValue.set("catalogJson",str);
return catalogJsonFromDb;
}
Map<String, List<Catelog2Vo>> catalogJsonFromCache = JSON.parseObject(catalogJson, new TypeReference<Map<String, List<Catelog2Vo>>>(){});
return catalogJsonFromCache;
}
public Map<String, List<Catelog2Vo>> getCatalogJsonFromDb() {
List<CategoryEntity> categoryEntities = this.list(null);
List<CategoryEntity> category1EntityList = getParent_cid(categoryEntities,0l);
Map<String, List<Catelog2Vo>> catelog2Vos = category1EntityList.stream().collect(Collectors.toMap(k -> k.getCatId().toString(), v -> {
//1.查到一级分类的所有二级分类
List<CategoryEntity> category2EntityList = getParent_cid(categoryEntities,v.getCatId());
//2.获取二级分类vo集合 用户
List<Catelog2Vo> catelog2VoList = category2EntityList.stream().map(catelog2 -> {
List<CategoryEntity> category3EntityList = getParent_cid(categoryEntities,catelog2.getCatId());
//3.获取三级分类vo集合
List<Catelog2Vo.Catelog3Vo> catelog3Vos = null;
if(category3EntityList !=null && category3EntityList.size() > 0){
catelog3Vos = category3EntityList.stream().map(catelog3 -> {
//获取三级分类vo
Catelog2Vo.Catelog3Vo catelog3Vo = new Catelog2Vo.Catelog3Vo(catelog3.getParentCid().toString(), catelog3.getCatId().toString(), catelog3.getName());
return catelog3Vo;
}).collect(Collectors.toList());
}
//2.获取二级分类vo
Catelog2Vo catelog2Vo = new Catelog2Vo(v.getCatId().toString(), catelog3Vos, catelog2.getCatId().toString(), catelog2.getName());
return catelog2Vo;
}).collect(Collectors.toList());
return catelog2VoList;
}));
return catelog2Vos;
}
2.テスト
ブラウザのリクエスト、最初は少し遅く、後者は速く、データがキャッシュに入るのは明らかです
キャッシュで表示することもできます