Browse Source

简化 Redis DAO 的使用,移除 RedisKeyDefine 类

YunaiV 2 years ago
parent
commit
1e4735c1fc
17 changed files with 43 additions and 347 deletions
  1. 0 47
      yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefine.java
  2. 0 27
      yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefineTest.java
  3. 1 9
      yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/config/YudaoCaptchaConfiguration.java
  4. 1 1
      yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/RedisCaptchaServiceImpl.java
  5. 0 25
      yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/enums/CaptchaRedisKeyConstants.java
  6. 9 7
      yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/redis/IdempotentRedisDAO.java
  7. 0 8
      yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/config/YudaoLock4jConfiguration.java
  8. 0 19
      yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/Lock4jRedisKeyConstants.java
  9. 0 113
      yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyDefine.java
  10. 0 28
      yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyRegistry.java
  11. 5 8
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.java
  12. 0 35
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyDefineRespVO.java
  13. 0 5
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/redis/RedisConvert.java
  14. 8 4
      yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java
  15. 8 1
      yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java
  16. 10 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java
  17. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java

+ 0 - 47
yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefine.java

@@ -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);
-    }
-
-}

+ 0 - 27
yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisKeyDefineTest.java

@@ -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);
-    }
-
-}

+ 1 - 9
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);

+ 1 - 1
yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/service/RedisCaptchaServiceImpl.java → 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;

+ 0 - 25
yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/enums/CaptchaRedisKeyConstants.java

@@ -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}
-
-}

+ 9 - 7
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);
     }
 
 }

+ 0 - 8
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();

+ 0 - 19
yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/Lock4jRedisKeyConstants.java

@@ -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 数据结构
-
-}

+ 0 - 113
yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyDefine.java

@@ -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);
-    }
-
-}

+ 0 - 28
yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/RedisKeyRegistry.java

@@ -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<RedisKeyDefine> DEFINES = new ArrayList<>();
-
-    public static void add(RedisKeyDefine define) {
-        DEFINES.add(define);
-    }
-
-    public static List<RedisKeyDefine> list() {
-        return DEFINES;
-    }
-
-    public static int size() {
-        return DEFINES.size();
-    }
-
-}

+ 5 - 8
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<List<RedisKeyDefineRespVO>> getKeyDefineList() {
-        List<RedisKeyDefine> 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<List<Object>> getKeyDefineList() {
+        return success(Collections.emptyList());
     }
 
     @GetMapping("/get-key-list")

+ 0 - 35
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/vo/RedisKeyDefineRespVO.java

@@ -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;
-
-}

+ 0 - 5
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<RedisKeyDefineRespVO> convertList(List<RedisKeyDefine> list);
-
 }

+ 8 - 4
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";
 
 }

+ 8 - 1
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);
     }
 
 }

+ 10 - 9
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";
+
     /**
      * 站内信模版的缓存
      *

+ 1 - 1
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);
     }
 
 }