!562 优化 redisCache

This commit is contained in:
YunaiV 2023-08-11 21:46:53 +08:00
parent 8960a82978
commit 9ff67b479f
3 changed files with 23 additions and 19 deletions

View File

@ -7,15 +7,21 @@ import org.springframework.validation.annotation.Validated;
/** /**
* Cache 配置项 * Cache 配置项
* *
* @author * @author Wanwan
*/ */
@ConfigurationProperties("yudao.cache") @ConfigurationProperties("yudao.cache")
@Data @Data
@Validated @Validated
public class YudaoCacheProperties { public class YudaoCacheProperties {
/**
* {@link #redisScanBatchSize} 默认值
*/
private static final Integer REDIS_SCAN_BATCH_SIZE_DEFAULT = 30;
/** /**
* redis scan 一次返回数量 * redis scan 一次返回数量
*/ */
private Integer redisScanBatchSize = 30; private Integer redisScanBatchSize = REDIS_SCAN_BATCH_SIZE_DEFAULT;
} }

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.framework.redis.core;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import org.springframework.boot.convert.DurationStyle;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.cache.RedisCache; import org.springframework.data.redis.cache.RedisCache;
import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheConfiguration;
@ -10,12 +9,12 @@ import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.cache.RedisCacheWriter;
import java.time.Duration; import java.time.Duration;
import java.time.temporal.ChronoUnit;
/** /**
* 支持自定义过期时间的 {@link RedisCacheManager} 实现类 * 支持自定义过期时间的 {@link RedisCacheManager} 实现类
* <p> *
* {@link Cacheable#cacheNames()} 格式为 "key#ttl" # 后面的 ttl 为过期时间单位为最后一个字母(支持的单位有d天h小时m分钟s秒)默认单位为秒 * {@link Cacheable#cacheNames()} 格式为 "key#ttl" # 后面的 ttl 为过期时间
* 单位为最后一个字母支持的单位有d h 小时m 分钟s 默认单位为 s
* *
* @author 芋道源码 * @author 芋道源码
*/ */
@ -50,34 +49,35 @@ public class TimeoutRedisCacheManager extends RedisCacheManager {
} }
/** /**
* 解析 Duration * 解析过期时间 Duration
* *
* @param ttlStr * @param ttlStr 过期时间字符串
* @return * @return 过期时间 Duration
*/ */
private Duration parseDuration(String ttlStr) { private Duration parseDuration(String ttlStr) {
String timeUnit = StrUtil.subSuf(ttlStr, -1); String timeUnit = StrUtil.subSuf(ttlStr, -1);
switch (timeUnit) { switch (timeUnit) {
case "d": case "d":
return Duration.ofDays(removeSuffix(ttlStr)); return Duration.ofDays(removeDurationSuffix(ttlStr));
case "h": case "h":
return Duration.ofHours(removeSuffix(ttlStr)); return Duration.ofHours(removeDurationSuffix(ttlStr));
case "m": case "m":
return Duration.ofMinutes(removeSuffix(ttlStr)); return Duration.ofMinutes(removeDurationSuffix(ttlStr));
case "s": case "s":
return Duration.ofSeconds(removeSuffix(ttlStr)); return Duration.ofSeconds(removeDurationSuffix(ttlStr));
default: default:
return Duration.ofSeconds(Long.parseLong(ttlStr)); return Duration.ofSeconds(Long.parseLong(ttlStr));
} }
} }
/** /**
* 移除多余的后缀 * 移除多余的后缀返回具体的时间
* *
* @param ttlStr * @param ttlStr 过期时间字符串
* @return * @return 时间
*/ */
private Long removeSuffix(String ttlStr) { private Long removeDurationSuffix(String ttlStr) {
return NumberUtil.parseLong(StrUtil.sub(ttlStr, 0, ttlStr.length() - 1)); return NumberUtil.parseLong(StrUtil.sub(ttlStr, 0, ttlStr.length() - 1));
} }
} }

View File

@ -204,8 +204,6 @@ yudao:
order: order:
app-id: 1 # 商户编号 app-id: 1 # 商户编号
expire-time: 2h # 支付的过期时间 expire-time: 2h # 支付的过期时间
cache: # spring cache 相关配置
redis-scan-batch-size: 30 # redis scan 一次返回数量
debug: false debug: false