1. 程式人生 > 實用技巧 >穀粒商城SpringCache快取(二十九)

穀粒商城SpringCache快取(二十九)

167、快取-SpringCache-簡介-172、快取-SpringCache-原理與不足

感覺也比較簡單,視訊中也是跟著官網的介紹做的,可以參考前面一篇的中文翻譯。

主要程式碼如下:

/**
     * 級聯更新所有關聯的資料
     * @param category
     */
    @Transactional
    @Override
//    @Caching( evict ={
//            @CacheEvict(value={"category"},key = "'getLevel1Categorys'"),
//            @CacheEvict(value={"category"},key = "'getCatalogJson''")
// }) @CacheEvict(value ="category",allEntries = true) public void updateCascade(CategoryEntity category) { this.updateById(category); categoryBrandRelationService.updateCategory(category.getCatId(),category.getName()); } /** * 查詢所有一級分類 * * @return */
// @Cacheable(value={"category"},key = "'level1Categorys'") //代表當前結果需要快取,如果有就不需要快取,沒有則快取 @Cacheable(value={"category"},key = "#root.method.name") @Override public List<CategoryEntity> getLevel1Categorys() { List<CategoryEntity> categoryEntities = baseMapper.selectList(new
QueryWrapper<CategoryEntity>().eq("parent_cid", 0)); return categoryEntities; } public Boolean lock(String key, String value,String luaPath) throws IOException { DefaultRedisScript<Boolean> lockScript = new DefaultRedisScript<>(); ClassPathResource resource = new ClassPathResource(luaPath); ResourceScriptSource source = new ResourceScriptSource(resource); lockScript.setScriptSource(source); lockScript.setResultType(Boolean.class); Boolean result = (Boolean) stringRedisTemplate.execute(lockScript, Arrays.asList(key, value)); return result; } @Override @Cacheable(value={"category"},key = "#root.method.name") public Map<String, List<Catalog2Vo>> getCatalogJson() { //查詢出所有分類 List<CategoryEntity> selectList = baseMapper.selectList(null); //先查出所有一級分類 List<CategoryEntity> level1Categorys = getCategorys(selectList, 0L); //封裝資料 map k,v 結構 Map<String, List<Catalog2Vo>> map = level1Categorys.stream().collect(Collectors.toMap(k -> k.getCatId().toString(), v -> { //每一個的一級分類,查到這個一級分類的二級分類 List<CategoryEntity> category2Entities = getCategorys(selectList, v.getCatId()); List<Catalog2Vo> catelog2Vos = null; if (category2Entities != null) { catelog2Vos = category2Entities.stream().map(level2 -> { //封裝catalog2Vo Catalog2Vo catalog2Vo = new Catalog2Vo(v.getCatId().toString(), null, level2.getCatId().toString(), level2.getName()); //每一個二級分類,查到三級分類 List<CategoryEntity> category3Entities = getCategorys(selectList, level2.getCatId()); if (category3Entities != null) { List<Object> catalog3List = category3Entities.stream().map(level3 -> { //封裝catalog3Vo Catalog2Vo.Catalog3Vo catalog3Vo = new Catalog2Vo.Catalog3Vo(level2.getCatId().toString(), level3.getCatId().toString(), level3.getName()); return catalog3Vo; }).collect(Collectors.toList()); //封裝catalog3Vo到catalog2Vo catalog2Vo.setCatalog3List(catalog3List); } return catalog2Vo; }).collect(Collectors.toList()); } //返回v=catalog2Vo return catelog2Vos; })); return map; }

演示的結果圖:

修改資料,快取消失:

在重新整理首頁,快取修改後的資料

總結如下: