CMS 给 Category 栏目添加缓存

This commit is contained in:
thinkgem
2025-10-10 16:45:13 +08:00
parent d981e643f4
commit 07b24e3685
5 changed files with 102 additions and 83 deletions

View File

@@ -31,8 +31,6 @@ public class CategoryService extends TreeService<CategoryDao, Category> {
/** /**
* 获取单条数据 * 获取单条数据
* @param category
* @return
*/ */
@Override @Override
public Category get(Category category) { public Category get(Category category) {
@@ -50,8 +48,6 @@ public class CategoryService extends TreeService<CategoryDao, Category> {
/** /**
* 查询列表数据 * 查询列表数据
* @param category
* @return
*/ */
@Override @Override
public List<Category> findList(Category category) { public List<Category> findList(Category category) {
@@ -60,19 +56,15 @@ public class CategoryService extends TreeService<CategoryDao, Category> {
/** /**
* 保存数据(插入或更新) * 保存数据(插入或更新)
* @param category
*/ */
@Override @Override
@Transactional @Transactional
public void save(Category category) { public void save(Category category) {
super.save(category); super.save(category);
CmsUtils.removeCache("mainNavList_"+category.getSite().getId());
// 保存上传图片 // 保存上传图片
FileUploadUtils.saveFileUpload(category, category.getId(), "category_image"); FileUploadUtils.saveFileUpload(category, category.getId(), "category_image");
// 清理首页、栏目和文章页面缓存 // 清理栏目缓存
if (pageCacheService != null) { clearCache(category);
pageCacheService.clearCache(category);
}
} }
/** /**
@@ -87,27 +79,37 @@ public class CategoryService extends TreeService<CategoryDao, Category> {
/** /**
* 更新状态 * 更新状态
* @param category
*/ */
@Override @Override
@Transactional @Transactional
public void updateStatus(Category category) { public void updateStatus(Category category) {
super.updateStatus(category); super.updateStatus(category);
// 清理首页、栏目和文章页面缓存 // 清理栏目缓存
if (pageCacheService != null) { clearCache(category);
pageCacheService.clearCache(category);
}
} }
/** /**
* 删除数据 * 删除数据
* @param category
*/ */
@Override @Override
@Transactional @Transactional
public void delete(Category category) { public void delete(Category category) {
category.sqlMap().markIdDelete(); category.sqlMap().markIdDelete();
super.delete(category); super.delete(category);
// 清理栏目缓存
clearCache(category);
}
/**
* 清理栏目缓存
*/
public void clearCache(Category category) {
// 清理栏目缓存
CmsUtils.removeCache("category_" + category.getId());
// 清理栏目列表缓存
CmsUtils.removeCacheByKeyPrefix("categoryList_" + category.getSite().getId() + "_" + category.getParentCode() + "_");
// 清理主导航缓存
CmsUtils.removeCache("mainNavList_" + category.getSite().getId());
// 清理首页、栏目和文章页面缓存 // 清理首页、栏目和文章页面缓存
if (pageCacheService != null) { if (pageCacheService != null) {
pageCacheService.clearCache(category); pageCacheService.clearCache(category);

View File

@@ -32,7 +32,6 @@ public class SiteService extends CrudService<SiteDao, Site> {
/** /**
* 获取单条数据 * 获取单条数据
* @param site * @param site
* @return
*/ */
@Override @Override
public Site get(Site site) { public Site get(Site site) {
@@ -43,7 +42,6 @@ public class SiteService extends CrudService<SiteDao, Site> {
* 查询分页数据 * 查询分页数据
* @param site 查询条件 * @param site 查询条件
* @param site page 分页对象 * @param site page 分页对象
* @return
*/ */
@Override @Override
public Page<Site> findPage(Site site) { public Page<Site> findPage(Site site) {
@@ -52,19 +50,14 @@ public class SiteService extends CrudService<SiteDao, Site> {
/** /**
* 保存数据(插入或更新) * 保存数据(插入或更新)
* @param site
*/ */
@Override @Override
@Transactional @Transactional
public void save(Site site) { public void save(Site site) {
super.save(site); super.save(site);
CmsUtils.removeCache("siteList");
// 保存logo
FileUploadUtils.saveFileUpload(site, site.getId(), "site_logo"); FileUploadUtils.saveFileUpload(site, site.getId(), "site_logo");
// 清理首页、栏目和文章页面缓存 // 清理站点缓存
if (pageCacheService != null) { clearCache(site);
pageCacheService.clearCache(site);
}
} }
/** /**
@@ -75,11 +68,8 @@ public class SiteService extends CrudService<SiteDao, Site> {
@Transactional @Transactional
public void updateStatus(Site site) { public void updateStatus(Site site) {
super.updateStatus(site); super.updateStatus(site);
CmsUtils.removeCache("siteList"); // 清理站点缓存
// 清理首页、栏目和文章页面缓存 clearCache(site);
if (pageCacheService != null) {
pageCacheService.clearCache(site);
}
} }
/** /**
@@ -91,11 +81,8 @@ public class SiteService extends CrudService<SiteDao, Site> {
public void delete(Site site) { public void delete(Site site) {
site.sqlMap().markIdDelete(); site.sqlMap().markIdDelete();
super.delete(site); super.delete(site);
CmsUtils.removeCache("siteList"); // 清理站点缓存
// 清理首页、栏目和文章页面缓存 clearCache(site);
if (pageCacheService != null) {
pageCacheService.clearCache(site);
}
} }
// /** // /**
@@ -110,6 +97,26 @@ public class SiteService extends CrudService<SiteDao, Site> {
// CmsUtils.removeCache("siteList"); // CmsUtils.removeCache("siteList");
// } // }
/**
* 清理站点缓存
*/
public void clearCache(Site site) {
// 清理栏目缓存
CmsUtils.removeCacheByKeyPrefix("category_");
// 清理栏目列表缓存
CmsUtils.removeCacheByKeyPrefix("categoryList_" + site.getId() + "_");
// 清理主导航缓存
CmsUtils.removeCache("mainNavList_" + site.getId());
// 清理站点缓存
CmsUtils.removeCache("site_" + site.getId());
// 清理站点列表缓存
CmsUtils.removeCache("siteList");
// 清理首页、栏目和文章页面缓存
if (pageCacheService != null) {
pageCacheService.clearCache(site);
}
}
/** /**
* 重建索引 * 重建索引
* @author ThinkGem * @author ThinkGem

View File

@@ -5,6 +5,7 @@
package com.jeesite.modules.cms.utils; package com.jeesite.modules.cms.utils;
import com.jeesite.common.cache.CacheUtils; import com.jeesite.common.cache.CacheUtils;
import com.jeesite.common.codec.Md5Utils;
import com.jeesite.common.collect.ListUtils; import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.config.Global; import com.jeesite.common.config.Global;
import com.jeesite.common.entity.Page; import com.jeesite.common.entity.Page;
@@ -52,17 +53,14 @@ public class CmsUtils {
* @param siteCode 站点编号 * @param siteCode 站点编号
*/ */
public static Site getSite(String siteCode) { public static Site getSite(String siteCode) {
String code = Site.MAIN_SITE_CODE; String code = StringUtils.isNotBlank(siteCode) ? siteCode : Site.MAIN_SITE_CODE;
if (StringUtils.isNotBlank(siteCode)) { return CmsUtils.computeIfAbsentCache("site_" + code, k -> {
code = siteCode; Site site = Static.siteService.get(code);
} if (site == null) {
// 根据编码获取站点 site = new Site(code);
for (Site site : getSiteList()) {
if (site.getSiteCode().equals(code)) {
return site;
} }
} return site;
return new Site(code); });
} }
/** /**
@@ -92,7 +90,8 @@ public class CmsUtils {
* @param categoryCode 栏目编号 * @param categoryCode 栏目编号
*/ */
public static Category getCategory(String categoryCode) { public static Category getCategory(String categoryCode) {
return Static.categoryService.get(categoryCode); return CmsUtils.computeIfAbsentCache("category_" + categoryCode, k ->
Static.categoryService.get(categoryCode));
} }
/** /**
@@ -113,46 +112,49 @@ public class CmsUtils {
if (StringUtils.isBlank(siteCode) || StringUtils.isBlank(parentCode)) { if (StringUtils.isBlank(siteCode) || StringUtils.isBlank(parentCode)) {
return ListUtils.newArrayList(); return ListUtils.newArrayList();
} }
Page<Category> page = new Page<>(1, number, -1); String key = "categoryList_" + siteCode + "_" + parentCode + "_" + Md5Utils.md5(number + "_" + params);
Category category = new Category(); return CmsUtils.computeIfAbsentCache(key, k -> {
category.setSite(new Site(siteCode)); Page<Category> page = new Page<>(1, number, -1);
category.setParentCode(parentCode); Category category = new Category();
Boolean isChildList = false; // 是否进行childList转换 category.setSite(new Site(siteCode));
if (StringUtils.isNotBlank(params)) { category.setParentCode(parentCode);
@SuppressWarnings({ "rawtypes" }) boolean isChildList = false; // 是否进行childList转换
Map map = JsonMapper.fromJson("{" + params.trim() + "}", Map.class); if (StringUtils.isNotBlank(params)) {
@SuppressWarnings({ "rawtypes" })
Map map = JsonMapper.fromJson("{" + params.trim() + "}", Map.class);
// 获取的层级级别 // 获取的层级级别
String sortGrades = ObjectUtils.toString(map.get("sortGrades")); String sortGrades = ObjectUtils.toString(map.get("sortGrades"));
if (StringUtils.isNotBlank(sortGrades)) { if (StringUtils.isNotBlank(sortGrades)) {
// 如果设置了级别则清理ParentCode并使用ParentCodes进行查询 // 如果设置了级别则清理ParentCode并使用ParentCodes进行查询
category.setParentCode(null); category.setParentCode(null);
// 如果是跟节点则不加入条件,代表查询全部,不是跟节点的时候获取指定节点的所有下级 // 如果是跟节点则不加入条件,代表查询全部,不是跟节点的时候获取指定节点的所有下级
if (!Category.ROOT_CODE.equals(parentCode)) { if (!Category.ROOT_CODE.equals(parentCode)) {
category.setParentCodes("%," + parentCode + ",%"); category.setParentCodes("%," + parentCode + ",%");
}
// 增加获取层次级别条件
List<Integer> sortGradeList = ListUtils.newArrayList();
for (String s : StringUtils.splitComma(sortGrades)) {
sortGradeList.add(ObjectUtils.toInteger(s));
}
category.setSortGradeList(sortGradeList);
} }
// 是否进行childList转换
// 增加获取层次级别条件 isChildList = ObjectUtils.toBoolean(map.get("isChildList"));
List<Integer> sortGradeList = ListUtils.newArrayList();
for (String s : StringUtils.splitComma(sortGrades)) {
sortGradeList.add(ObjectUtils.toInteger(s));
}
category.setSortGradeList(sortGradeList);
} }
// 是否进行childList转换 category.setPage(page);
isChildList = ObjectUtils.toBoolean(map.get("isChildList")); page = Static.categoryService.findPage(category);
} // 进行childList转换
category.setPage(page); if (isChildList) {
page = Static.categoryService.findPage(category); List<Category> sourceList = page.getList();
// 进行childList转换 List<Category> targetList = Static.categoryService.convertTreeList(sourceList, parentCode);
if (isChildList) { page.setList(targetList);
List<Category> sourceList = page.getList(); }
List<Category> targetList = Static.categoryService.convertTreeList(sourceList, parentCode); return page.getList();
page.setList(targetList); });
}
return page.getList();
} }
/** /**
@@ -518,4 +520,12 @@ public class CmsUtils {
CacheUtils.remove(CMS_CACHE, key); CacheUtils.remove(CMS_CACHE, key);
} }
/**
* 根据key前缀从缓存中移除
* @param key 缓存键
*/
public static void removeCacheByKeyPrefix(String key) {
CacheUtils.removeByKeyPrefix(CMS_CACHE, key);
}
} }

View File

@@ -126,7 +126,7 @@ public class ArticleController extends BaseController {
categoryParam.setSite(new Site(Site.getCurrentSiteCode())); categoryParam.setSite(new Site(Site.getCurrentSiteCode()));
categoryParam.setParentCode(article.getCategory().getCategoryCode()); categoryParam.setParentCode(article.getCategory().getCategoryCode());
List<Category> list = categoryService.findList(categoryParam); List<Category> list = categoryService.findList(categoryParam);
if (list.size() > 0) { if (!list.isEmpty()) {
article.setCategory(null); // 不允许在父节点上添加文章 article.setCategory(null); // 不允许在父节点上添加文章
} else { } else {
article.setCategory(CmsUtils.getCategory(article.getCategory().getCategoryCode())); article.setCategory(CmsUtils.getCategory(article.getCategory().getCategoryCode()));

View File

@@ -40,7 +40,7 @@
<label class="control-label col-sm-4" title=""> <label class="control-label col-sm-4" title="">
<span class="required hide">*</span> ${text('站点域名')}<i class="fa icon-question hide"></i></label> <span class="required hide">*</span> ${text('站点域名')}<i class="fa icon-question hide"></i></label>
<div class="col-sm-8"> <div class="col-sm-8">
<#form:input path="domain" maxlength="500" class="form-control" placeholder="www.jeesite.com"/> <#form:input path="domain" maxlength="500" class="form-control" placeholder="https://jeesite.com"/>
</div> </div>
</div> </div>
</div> </div>