疯狂的狮子li
2022-07-14 8a930bd7d5c2f6625b14622da5015a6ff8273f38
update 优化 pr201 代码逻辑
已修改3个文件
111 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/RedisUtils.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/handler/KeyPrefixHandler.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
@@ -1,12 +1,12 @@
package com.ruoyi.web.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.collection.CollUtil;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.system.domain.SysCache;
import lombok.RequiredArgsConstructor;
import org.redisson.spring.data.connection.RedissonConnectionFactory;
@@ -38,6 +38,7 @@
        CACHES.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
        CACHES.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
        CACHES.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
        CACHES.add(new SysCache(OssConstant.SYS_OSS_KEY, "OSS配置"));
    }
    /**
@@ -86,8 +87,7 @@
    @SaCheckPermission("monitor:cache:list")
    @GetMapping("/getKeys/{cacheName}")
    public R<Collection<String>> getCacheKeys(@PathVariable String cacheName) {
        Iterable<String> iterable = RedisUtils.getClient().getKeys().getKeysByPattern(cacheName + "*");
        Collection<String> cacheKyes = CollUtil.toCollection(iterable);
        Collection<String> cacheKyes = RedisUtils.keys(cacheName + "*");
        return R.ok(cacheKyes);
    }
@@ -113,7 +113,7 @@
    @SaCheckPermission("monitor:cache:list")
    @DeleteMapping("/clearCacheName/{cacheName}")
    public R<Void> clearCacheName(@PathVariable String cacheName) {
        RedisUtils.getClient().getKeys().deleteByPattern(cacheName + "*");
        RedisUtils.deleteKeys(cacheName + "*");
        return R.ok();
    }
@@ -135,7 +135,7 @@
    @SaCheckPermission("monitor:cache:list")
    @DeleteMapping("/clearCacheAll")
    public R<Void> clearCacheAll() {
        RedisUtils.getClient().getKeys().deleteByPattern("*");
        RedisUtils.deleteKeys("*");
        return R.ok();
    }
ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/RedisUtils.java
@@ -1,10 +1,10 @@
package com.ruoyi.common.utils.redis;
import cn.hutool.core.collection.IterUtil;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.redisson.api.*;
import org.redisson.config.Config;
import java.time.Duration;
import java.util.Collection;
@@ -12,6 +12,8 @@
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * redis 工具类
@@ -24,6 +26,14 @@
public class RedisUtils {
    private static final RedissonClient CLIENT = SpringUtils.getBean(RedissonClient.class);
    public static NameMapper getNameMapper() {
        Config config = CLIENT.getConfig();
        if (config.isClusterConfig()) {
            return config.useClusterServers().getNameMapper();
        }
        return config.useSingleServer().getNameMapper();
    }
    /**
     * 限流
@@ -415,8 +425,17 @@
     * @return 对象列表
     */
    public static Collection<String> keys(final String pattern) {
        Iterable<String> iterable = CLIENT.getKeys().getKeysByPattern(pattern);
        return IterUtil.toList(iterable);
        Stream<String> stream = CLIENT.getKeys().getKeysStreamByPattern(getNameMapper().map(pattern));
        return stream.map(key -> getNameMapper().unmap(key)).collect(Collectors.toList());
    }
    /**
     * 删除缓存的基本对象列表
     *
     * @param pattern 字符串前缀
     */
    public static void deleteKeys(final String pattern) {
        CLIENT.getKeys().deleteByPattern(getNameMapper().map(pattern));
    }
    /**
@@ -426,6 +445,6 @@
     */
    public static Boolean hasKey(String key) {
        RKeys rKeys = CLIENT.getKeys();
        return rKeys.countExists(key) > 0;
        return rKeys.countExists(getNameMapper().map(key)) > 0;
    }
}
ruoyi-framework/src/main/java/com/ruoyi/framework/handler/KeyPrefixHandler.java
@@ -3,48 +3,48 @@
import com.ruoyi.common.utils.StringUtils;
import org.redisson.api.NameMapper;
/*
/**
 * redis缓存key前缀处理
 *
 * @author ye
 * @create 2022/7/14 17:44
 * @date 2022/7/14 17:44
 * @since 4.3.0
 */
public class KeyPrefixHandler implements NameMapper {
  private final String keyPrefix;
  //前缀为空 则返回空前缀
  public KeyPrefixHandler(String keyPrefix) {
    this.keyPrefix = StringUtils.isBlank(keyPrefix) ? "" : keyPrefix + ":";
  }
  //增加前缀
  @Override
  public String map(String name) {
    if (StringUtils.isBlank(name)) {
      return null;
    private final String keyPrefix;
    public KeyPrefixHandler(String keyPrefix) {
        //前缀为空 则返回空前缀
        this.keyPrefix = StringUtils.isBlank(keyPrefix) ? "" : keyPrefix + ":";
    }
    if (StringUtils.isBlank(keyPrefix)) {
      return name;
    /**
     * 增加前缀
     */
    @Override
    public String map(String name) {
        if (StringUtils.isBlank(name)) {
            return null;
        }
        if (StringUtils.isNotBlank(keyPrefix) && !name.startsWith(keyPrefix)) {
            return keyPrefix + name;
        }
        return name;
    }
    if (!name.startsWith(keyPrefix)) {
      return keyPrefix + name;
    } else {
      return name;
    /**
     * 去除前缀
     */
    @Override
    public String unmap(String name) {
        if (StringUtils.isBlank(name)) {
            return null;
        }
        if (StringUtils.isNotBlank(keyPrefix) && name.startsWith(keyPrefix)) {
            return name.substring(keyPrefix.length());
        }
        return name;
    }
  }
  //去除前缀
  @Override
  public String unmap(String name) {
    if (StringUtils.isBlank(name)) {
      return null;
    }
    if (StringUtils.isBlank(keyPrefix)) {
      return name;
    }
    if (name.startsWith(keyPrefix)) {
      return name.substring(keyPrefix.length());
    }
    return name;
  }
}