diff --git a/client-api/src/main/java/org/jiayunet/service/JobService.java b/client-api/src/main/java/org/jiayunet/service/JobService.java index 12b80e1..955d7b1 100644 --- a/client-api/src/main/java/org/jiayunet/service/JobService.java +++ b/client-api/src/main/java/org/jiayunet/service/JobService.java @@ -2,6 +2,8 @@ package org.jiayunet.service; import org.jiayunet.ai.AiChatAbility; import org.jiayunet.ai.AiResponseCleanTool; +import org.jiayunet.config.CacheConfig; +import org.springframework.cache.annotation.Cacheable; import org.springframework.util.StopWatch; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -212,6 +214,7 @@ public class JobService { *
岗位关联公司、公司关联行业(bg_industry level=2),按上架岗位数量倒序取前 limit 个
*只返回行业ID和名称,岗位数量仅用于排序不对外暴露
*/ + @Cacheable(cacheNames = CacheConfig.HOT_INDUSTRY) public Listbg_job.category_id 存三级叶子,SQL 内自关联上溯到二级后按二级分组,按上架岗位数量倒序取前 limit 个
*只返回岗位类型ID和名称,岗位数量仅用于排序不对外暴露
*/ + @Cacheable(cacheNames = CacheConfig.HOT_JOB_CATEGORY) public List岗位关联公司、公司关联地区,按上架岗位数量倒序取前 limit 个
*只返回地区编码和名称,岗位数量仅用于排序不对外暴露
*/ + @Cacheable(cacheNames = CacheConfig.HOT_CITY) public List基于 Caffeine 的 Spring Cache 实现,用于热门榜单等全局只读、变化慢、允许短时陈旧的数据
+ *每个缓存独立注册、独立过期时间,调整某个缓存的时长直接改注册时传入的分钟数,互不影响
+ * + * @author zk + */ +@Configuration +@EnableCaching +public class CacheConfig { + + /** 缓存名:热门行业 */ + public static final String HOT_INDUSTRY = "hotIndustry"; + + /** 缓存名:热门岗位类型 */ + public static final String HOT_JOB_CATEGORY = "hotJobCategory"; + + /** 缓存名:热门城市 */ + public static final String HOT_CITY = "hotCity"; + + /** 单个缓存最大条目数 */ + private static final long MAX_SIZE = 100; + + /** + * 缓存管理器 + *三个热门榜单各注册一份独立的 Caffeine 实例,过期时间互相独立(单位:分钟)
+ *另设一份兜底策略:业务里如果用了未登记的缓存名,动态创建时同样带过期时间,不会永不过期
+ */ + @Bean + public CacheManager cacheManager() { + CaffeineCacheManager cacheManager = new CaffeineCacheManager(); + + // 兜底策略(动态创建未登记缓存时生效) + cacheManager.setCaffeine(Caffeine.newBuilder() + .expireAfterWrite(30, TimeUnit.MINUTES) + .maximumSize(MAX_SIZE)); + + // 各缓存独立注册,独立过期时间 + cacheManager.registerCustomCache(HOT_INDUSTRY, buildCache(60)); + cacheManager.registerCustomCache(HOT_JOB_CATEGORY, buildCache(60)); + cacheManager.registerCustomCache(HOT_CITY, buildCache(60)); + + return cacheManager; + } + + /** + * 构建一个指定过期时长的 Caffeine 缓存实例 + * + * @param expireMinutes 写入后过期时长(分钟) + */ + private Cache