diff --git a/web-api/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisKey.java b/web-api/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisKey.java new file mode 100644 index 0000000..a9ab047 --- /dev/null +++ b/web-api/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisKey.java @@ -0,0 +1,15 @@ +package com.ruoyi.common.constant; + +/** + * Redis / Spring Cache 名称等常量(与 {@code @Cacheable(cacheNames = ...)}、RedisCacheConfiguration 一致) + */ +public final class RedisKey { + + private RedisKey() { + } + + /** + * Spring Cache 名:部门近七日汇总({@code @Cacheable} 与 TTL 配置须同名) + */ + public static final String CACHE_DEPT_SUMMARY = "dept_summary"; +} diff --git a/web-api/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/web-api/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java index f5bd47c..9445ca7 100644 --- a/web-api/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java +++ b/web-api/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -1,14 +1,19 @@ package com.ruoyi.framework.config; +import java.time.Duration; + import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import com.ruoyi.common.constant.RedisKey; +import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; @@ -23,6 +28,17 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { + + /** + * 部门汇总等缓存单独 TTL(与 {@link RedisKey#CACHE_DEPT_SUMMARY} 对应) + */ + @Bean + public RedisCacheManagerBuilderCustomizer deptSummaryCacheTtlCustomizer() { + return builder -> builder.withCacheConfiguration( + RedisKey.CACHE_DEPT_SUMMARY, + RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5))); + } + @Bean @SuppressWarnings(value = {"unchecked", "rawtypes"}) public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { diff --git a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiVideoReportDataServiceImpl.java b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiVideoReportDataServiceImpl.java index 35fe9fb..8a957b1 100644 --- a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiVideoReportDataServiceImpl.java +++ b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiVideoReportDataServiceImpl.java @@ -3,6 +3,7 @@ package com.ruoyi.ai.service.impl; import com.ruoyi.ai.domain.AiVideoReportData; import com.ruoyi.ai.mapper.AiVideoReportDataMapper; import com.ruoyi.ai.service.IAiVideoReportDataService; +import com.ruoyi.common.constant.RedisKey; import com.ruoyi.common.core.dto.DeptSummaryDTO; import com.ruoyi.common.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -41,7 +42,7 @@ public class AiVideoReportDataServiceImpl implements IAiVideoReportDataService { * 部门近七日汇总数据 */ @Override - @Cacheable(cacheNames = "dept_summary", key = "#deptId") + @Cacheable(cacheNames = RedisKey.CACHE_DEPT_SUMMARY, key = "#deptId") public DeptSummaryDTO getSevenDayDeptSummaryData(Long deptId) { Date endTime = new Date(); // 获取今天的0点,再减去7天