diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefine.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefine.java deleted file mode 100644 index 2454d4ad36..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefine.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.yudao.framework.tenant.core.redis; - -import cn.hutool.core.util.ArrayUtil; -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; - -import java.time.Duration; - -/** - * 多租户拓展的 RedisKeyDefine 实现类 - * - * 由于 Redis 不同于 MySQL 有 column 字段,无法通过类似 WHERE tenant_id = ? 的方式过滤 - * 所以需要通过在 Redis Key 上增加后缀的方式,进行租户之间的隔离。具体的步骤是: - * 1. 假设 Redis Key 是 user:%d,示例是 user:1;对应到多租户的 Redis Key 是 user:%d:%d, - * 2. 在 Redis DAO 中,需要使用 {@link #formatKey(Object...)} 方法,进行 Redis Key 的格式化 - * - * 注意,大多数情况下,并不用使用 TenantRedisKeyDefine 实现。主要的使用场景,还是 Redis Key 可能存在冲突的情况。 - * 例如说,租户 1 和 2 都有一个手机号作为 Key,则他们会存在冲突的问题 - * - * @author 芋道源码 - */ -public class TenantRedisKeyDefine extends RedisKeyDefine { - - /** - * 多租户的 KEY 模板 - */ - private static final String KEY_TEMPLATE_SUFFIX = ":%d"; - - public TenantRedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, Duration timeout) { - super(memo, buildKeyTemplate(keyTemplate), keyType, valueType, timeout); - } - - public TenantRedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, TimeoutTypeEnum timeoutType) { - super(memo, buildKeyTemplate(keyTemplate), keyType, valueType, timeoutType); - } - - private static String buildKeyTemplate(String keyTemplate) { - return keyTemplate + KEY_TEMPLATE_SUFFIX; - } - - @Override - public String formatKey(Object... args) { - args = ArrayUtil.append(args, TenantRedisCacheManager.PREFIX + TenantContextHolder.getRequiredTenantId()); - return super.formatKey(args); - } - -} diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefineTest.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefineTest.java deleted file mode 100644 index d456e011cd..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefineTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.framework.tenant.core.redis; - -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class TenantRedisKeyDefineTest { - - @Test - public void testFormatKey() { - Long tenantId = 30L; - TenantContextHolder.setTenantId(tenantId); - // 准备参数 - TenantRedisKeyDefine define = new TenantRedisKeyDefine("", "user:%d:%d", RedisKeyDefine.KeyTypeEnum.HASH, - Object.class, RedisKeyDefine.TimeoutTypeEnum.FIXED); - Long userId = 10L; - Integer userType = 1; - - // 调用 - String key = define.formatKey(userId, userType); - // 断言 - assertEquals("user:10:1:30", key); - } - -} diff --git a/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/config/YudaoCaptchaConfiguration.java b/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/config/YudaoCaptchaConfiguration.java index 2a690d8009..83924c2367 100644 --- a/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/config/YudaoCaptchaConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/config/YudaoCaptchaConfiguration.java @@ -1,8 +1,6 @@ package cn.iocoder.yudao.framework.captcha.config; -import cn.hutool.core.util.ClassUtil; -import cn.iocoder.yudao.framework.captcha.core.enums.CaptchaRedisKeyConstants; -import cn.iocoder.yudao.framework.captcha.core.service.RedisCaptchaServiceImpl; +import cn.iocoder.yudao.framework.captcha.core.RedisCaptchaServiceImpl; import com.xingyuv.captcha.service.CaptchaCacheService; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; @@ -11,12 +9,6 @@ import org.springframework.data.redis.core.StringRedisTemplate; @AutoConfiguration public class YudaoCaptchaConfiguration { - static { - // 手动加载 Lock4jRedisKeyConstants 类,因为它不会被使用到 - // 如果不加载,会导致 Redis 监控,看到它的 Redis Key 枚举 - ClassUtil.loadClass(CaptchaRedisKeyConstants.class.getName()); - } - @Bean public CaptchaCacheService captchaCacheService(StringRedisTemplate stringRedisTemplate) { return new RedisCaptchaServiceImpl(stringRedisTemplate); diff --git a/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/service/RedisCaptchaServiceImpl.java b/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/RedisCaptchaServiceImpl.java similarity index 95% rename from yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/service/RedisCaptchaServiceImpl.java rename to yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/RedisCaptchaServiceImpl.java index 1429c47c28..66395e3b37 100644 --- a/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/service/RedisCaptchaServiceImpl.java +++ b/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/RedisCaptchaServiceImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.framework.captcha.core.service; +package cn.iocoder.yudao.framework.captcha.core; import com.xingyuv.captcha.service.CaptchaCacheService; import lombok.AllArgsConstructor; diff --git a/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/enums/CaptchaRedisKeyConstants.java b/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/enums/CaptchaRedisKeyConstants.java deleted file mode 100644 index 3e1147c370..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/enums/CaptchaRedisKeyConstants.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.framework.captcha.core.enums; - -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import com.xingyuv.captcha.model.vo.PointVO; - -import java.time.Duration; - -import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; - -/** - * 验证码 Redis Key 枚举类 - * - * @author 芋道源码 - */ -public interface CaptchaRedisKeyConstants { - - RedisKeyDefine AJ_CAPTCHA_REQ_LIMIT = new RedisKeyDefine("验证码的请求限流", - "AJ.CAPTCHA.REQ.LIMIT-%s-%s", - STRING, Integer.class, Duration.ofSeconds(60)); // 例如说:验证失败 5 次,get 接口锁定 - - RedisKeyDefine AJ_CAPTCHA_RUNNING = new RedisKeyDefine("验证码的坐标", - "RUNNING:CAPTCHA:%s", // AbstractCaptchaService.REDIS_CAPTCHA_KEY - STRING, PointVO.class, Duration.ofSeconds(120)); // {"secretKey":"PP1w2Frr2KEejD2m","x":162,"y":5} - -} diff --git a/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/redis/IdempotentRedisDAO.java b/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/redis/IdempotentRedisDAO.java index 05e1c6bd26..faed1202ef 100644 --- a/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/redis/IdempotentRedisDAO.java +++ b/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/redis/IdempotentRedisDAO.java @@ -1,13 +1,10 @@ package cn.iocoder.yudao.framework.idempotent.core.redis; -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; import lombok.AllArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import java.util.concurrent.TimeUnit; -import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; - /** * 幂等 Redis DAO * @@ -16,9 +13,14 @@ import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.S @AllArgsConstructor public class IdempotentRedisDAO { - private static final RedisKeyDefine IDEMPOTENT = new RedisKeyDefine("幂等操作", - "idempotent:%s", // 参数为 uuid - STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); + /** + * 幂等操作的 Redis Key 模板 + * + * KEY 格式:idempotent::{uuid} + * VALUE 格式:空字符串 + * 过期时间:动态传参 + */ + private static final String IDEMPOTENT_KEY_TEMPLATE = "idempotent:%s"; private final StringRedisTemplate redisTemplate; @@ -28,7 +30,7 @@ public class IdempotentRedisDAO { } private static String formatKey(String key) { - return String.format(IDEMPOTENT.getKeyTemplate(), key); + return String.format(IDEMPOTENT_KEY_TEMPLATE, key); } } diff --git a/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/config/YudaoLock4jConfiguration.java b/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/config/YudaoLock4jConfiguration.java index 2986da6c83..56220ee795 100644 --- a/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/config/YudaoLock4jConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/config/YudaoLock4jConfiguration.java @@ -1,21 +1,13 @@ package cn.iocoder.yudao.framework.lock4j.config; -import cn.hutool.core.util.ClassUtil; import com.baomidou.lock.spring.boot.autoconfigure.LockAutoConfiguration; import cn.iocoder.yudao.framework.lock4j.core.DefaultLockFailureStrategy; -import cn.iocoder.yudao.framework.lock4j.core.Lock4jRedisKeyConstants; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; @AutoConfiguration(before = LockAutoConfiguration.class) public class YudaoLock4jConfiguration { - static { - // 手动加载 Lock4jRedisKeyConstants 类,因为它不会被使用到 - // 如果不加载,会导致 Redis 监控,看到它的 Redis Key 枚举 - ClassUtil.loadClass(Lock4jRedisKeyConstants.class.getName()); - } - @Bean public DefaultLockFailureStrategy lockFailureStrategy() { return new DefaultLockFailureStrategy(); diff --git a/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/Lock4jRedisKeyConstants.java b/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/Lock4jRedisKeyConstants.java deleted file mode 100644 index cc01a253b8..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/Lock4jRedisKeyConstants.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.framework.lock4j.core; - -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import org.redisson.api.RLock; - -import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.HASH; - -/** - * Lock4j Redis Key 枚举类 - * - * @author 芋道源码 - */ -public interface Lock4jRedisKeyConstants { - - RedisKeyDefine LOCK4J = new RedisKeyDefine("分布式锁", - "lock4j:%s", // 参数来自 DefaultLockKeyBuilder 类 - HASH, RLock.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); // Redisson 的 Lock 锁,使用 Hash 数据结构 - -} diff --git a/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyDefine.java b/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyDefine.java deleted file mode 100644 index ba4fccb660..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyDefine.java +++ /dev/null @@ -1,113 +0,0 @@ -package cn.iocoder.yudao.framework.redis.core; - -import com.fasterxml.jackson.annotation.JsonValue; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.Getter; - -import java.time.Duration; - -/** - * Redis Key 定义类 - * - * @author 芋道源码 - */ -@Data -public class RedisKeyDefine { - - @Getter - @AllArgsConstructor - public enum KeyTypeEnum { - - STRING("String"), - LIST("List"), - HASH("Hash"), - SET("Set"), - ZSET("Sorted Set"), - STREAM("Stream"), - PUBSUB("Pub/Sub"); - - /** - * 类型 - */ - @JsonValue - private final String type; - - } - - @Getter - @AllArgsConstructor - public enum TimeoutTypeEnum { - - FOREVER(1), // 永不超时 - DYNAMIC(2), // 动态超时 - FIXED(3); // 固定超时 - - /** - * 类型 - */ - @JsonValue - private final Integer type; - - } - - /** - * Key 模板 - */ - private final String keyTemplate; - /** - * Key 类型的枚举 - */ - private final KeyTypeEnum keyType; - /** - * Value 类型 - * - * 如果是使用分布式锁,设置为 {@link java.util.concurrent.locks.Lock} 类型 - */ - private final Class valueType; - /** - * 超时类型 - */ - private final TimeoutTypeEnum timeoutType; - /** - * 过期时间 - */ - private final Duration timeout; - /** - * 备注 - */ - private final String memo; - - private RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, - TimeoutTypeEnum timeoutType, Duration timeout) { - this.memo = memo; - this.keyTemplate = keyTemplate; - this.keyType = keyType; - this.valueType = valueType; - this.timeout = timeout; - this.timeoutType = timeoutType; - // 添加注册表 - RedisKeyRegistry.add(this); - } - - public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, Duration timeout) { - this(memo, keyTemplate, keyType, valueType, TimeoutTypeEnum.FIXED, timeout); - } - - public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, TimeoutTypeEnum timeoutType) { - this(memo, keyTemplate, keyType, valueType, timeoutType, Duration.ZERO); - } - - /** - * 格式化 Key - * - * 注意,内部采用 {@link String#format(String, Object...)} 实现 - * - * @param args 格式化的参数 - * @return Key - */ - public String formatKey(Object... args) { - return String.format(keyTemplate, args); - } - -} diff --git a/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyRegistry.java b/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyRegistry.java deleted file mode 100644 index 4ef3b92f3b..0000000000 --- a/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyRegistry.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.framework.redis.core; - -import java.util.ArrayList; -import java.util.List; - -/** - * {@link RedisKeyDefine} 注册表 - */ -public class RedisKeyRegistry { - - /** - * Redis RedisKeyDefine 数组 - */ - private static final List DEFINES = new ArrayList<>(); - - public static void add(RedisKeyDefine define) { - DEFINES.add(define); - } - - public static List list() { - return DEFINES; - } - - public static int size() { - return DEFINES.size(); - } - -} diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java index c82b21cda4..2ce7e64ad6 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java @@ -3,15 +3,12 @@ package cn.iocoder.yudao.module.infra.controller.admin.redis; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.framework.redis.core.RedisKeyRegistry; -import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisKeyDefineRespVO; import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisKeyValueRespVO; import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisMonitorRespVO; import cn.iocoder.yudao.module.infra.convert.redis.RedisConvert; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.data.redis.connection.RedisServerCommands; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisCallback; @@ -50,9 +47,9 @@ public class RedisController { @GetMapping("/get-key-define-list") @Operation(summary = "获得 Redis Key 模板列表") @PreAuthorize("@ss.hasPermission('infra:redis:get-key-list')") - public CommonResult> getKeyDefineList() { - List keyDefines = RedisKeyRegistry.list(); - return success(RedisConvert.INSTANCE.convertList(keyDefines)); + @Deprecated // 建议使用 https://blog.jetbrains.com/datagrip/2022/11/02/datagrip-2022-3-eap-2-redis-support/ 连接 Redis 查询 + public CommonResult> getKeyDefineList() { + return success(Collections.emptyList()); } @GetMapping("/get-key-list") diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyDefineRespVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyDefineRespVO.java deleted file mode 100644 index f30ebb6239..0000000000 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyDefineRespVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.redis.vo; - -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; - -import java.time.Duration; - -@Schema(description = "管理后台 - Redis Key 信息 Response VO") -@Data -@Builder -@AllArgsConstructor -public class RedisKeyDefineRespVO { - - @Schema(description = "Key 模板", required = true, example = "login_user:%s") - private String keyTemplate; - - @Schema(description = "Key 类型的枚举", required = true, example = "String") - private RedisKeyDefine.KeyTypeEnum keyType; - - @Schema(description = "Value 类型", required = true, example = "java.lang.String") - private Class valueType; - - @Schema(description = "超时类型", required = true, example = "1") - private RedisKeyDefine.TimeoutTypeEnum timeoutType; - - @Schema(description = "过期时间,单位:毫秒", required = true, example = "1024") - private Duration timeout; - - @Schema(description = "备注", required = true, example = "啦啦啦啦~") - private String memo; - -} diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java index af31f7e9d1..0c8ca98fe6 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java @@ -1,14 +1,11 @@ package cn.iocoder.yudao.module.infra.convert.redis; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; -import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisKeyDefineRespVO; import cn.iocoder.yudao.module.infra.controller.admin.redis.vo.RedisMonitorRespVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.ArrayList; -import java.util.List; import java.util.Properties; @Mapper @@ -29,6 +26,4 @@ public interface RedisConvert { return respVO; } - List convertList(List list); - } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java index 4f5aaf750a..d0e61bf877 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.pay.dal.redis; -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; import org.redisson.api.RLock; /** @@ -10,8 +9,13 @@ import org.redisson.api.RLock; */ public interface RedisKeyConstants { - RedisKeyDefine PAY_NOTIFY_LOCK = new RedisKeyDefine("通知任务的分布式锁", - "pay_notify:lock:", // 参数来自 DefaultLockKeyBuilder 类 - RedisKeyDefine.KeyTypeEnum.HASH, RLock.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); // Redisson 的 Lock 锁,使用 Hash 数据结构 + /** + * 通知任务的分布式锁 + * + * KEY 格式:pay_notify::{id} + * VALUE 数据类型:HASH {@link RLock} + * 过期时间:动态传参 + */ + String PAY_NOTIFY_LOCK = "pay_notify:lock:%s"; } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java index 2d1f13f163..6fbde4d069 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java @@ -20,6 +20,13 @@ public class PayNotifyLockRedisDAO { @Resource private RedissonClient redissonClient; + /** + * 获得分布式锁,执行逻辑 + * + * @param id 通知任务编号 + * @param timeoutMillis 过期时间 + * @param runnable 逻辑 + */ public void lock(Long id, Long timeoutMillis, Runnable runnable) { String lockKey = formatKey(id); RLock lock = redissonClient.getLock(lockKey); @@ -33,7 +40,7 @@ public class PayNotifyLockRedisDAO { } private static String formatKey(Long id) { - return String.format(PAY_NOTIFY_LOCK.getKeyTemplate(), id); + return String.format(PAY_NOTIFY_LOCK, id); } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java index 372314ffd0..9ef92c6978 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java @@ -1,12 +1,7 @@ package cn.iocoder.yudao.module.system.dal.redis; -import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; -import java.time.Duration; - -import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; - /** * System Redis Key 枚举类 * @@ -14,10 +9,6 @@ import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.S */ public interface RedisKeyConstants { - RedisKeyDefine OAUTH2_ACCESS_TOKEN = new RedisKeyDefine("访问令牌的缓存", - "oauth2_access_token:%s", // 参数为访问令牌 token - STRING, OAuth2AccessTokenDO.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); - /** * 指定部门的所有子部门编号数组的缓存 * @@ -66,6 +57,16 @@ public interface RedisKeyConstants { */ String OAUTH_CLIENT = "oauth_client"; + /** + * 访问令牌的缓存 + * + * KEY 格式:oauth2_access_token::{token} + * VALUE 数据类型:String 访问令牌信息 {@link OAuth2AccessTokenDO} + * + * 由于动态过期时间,使用 RedisTemplate 操作 + */ + String OAUTH2_ACCESS_TOKEN = "oauth2_access_token::%s"; + /** * 站内信模版的缓存 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java index 517b0aa119..56347fd40e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java @@ -51,7 +51,7 @@ public class OAuth2AccessTokenRedisDAO { } private static String formatKey(String accessToken) { - return String.format(OAUTH2_ACCESS_TOKEN.getKeyTemplate(), accessToken); + return String.format(OAUTH2_ACCESS_TOKEN, accessToken); } }