Просмотр исходного кода

update 优化 使用 spring-cache 注解优化缓存

疯狂的狮子li 3 лет назад
Родитель
Сommit
74e075b4d3
18 измененных файлов с 189 добавлено и 137 удалено
  1. 11 8
      ruoyi-auth/src/main/java/com/ruoyi/auth/listener/UserActionListener.java
  2. 2 12
      ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/constant/OssConstant.java
  3. 7 5
      ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java
  4. 75 0
      ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/utils/CacheUtils.java
  5. 1 1
      ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/controller/SysOssController.java
  6. 1 1
      ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java
  7. 9 21
      ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java
  8. 8 11
      ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java
  9. 6 3
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java
  10. 4 2
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java
  11. 4 2
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java
  12. 4 2
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java
  13. 2 2
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
  14. 2 2
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
  15. 2 2
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
  16. 17 30
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
  17. 13 11
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
  18. 21 22
      ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java

+ 11 - 8
ruoyi-auth/src/main/java/com/ruoyi/auth/listener/UserActionListener.java

@@ -6,11 +6,11 @@ import cn.dev33.satoken.stp.SaLoginModel;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.useragent.UserAgent;
 import cn.hutool.http.useragent.UserAgentUtil;
-import com.ruoyi.common.core.constant.CacheConstants;
+import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.enums.UserType;
 import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.ip.AddressUtils;
-import com.ruoyi.common.redis.utils.RedisUtils;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.common.satoken.utils.LoginHelper;
 import com.ruoyi.system.api.domain.SysUserOnline;
 import com.ruoyi.system.api.model.LoginUser;
@@ -18,8 +18,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
-import java.time.Duration;
-
 /**
  * 用户行为 侦听器的实现
  *
@@ -53,7 +51,12 @@ public class UserActionListener implements SaTokenListener {
             if (ObjectUtil.isNotNull(user.getDeptName())) {
                 userOnline.setDeptName(user.getDeptName());
             }
-            RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, userOnline, Duration.ofSeconds(tokenConfig.getTimeout()));
+            String cacheNames = CacheNames.ONLINE_TOKEN;
+            if (tokenConfig.getTimeout() > 0) {
+                // 增加 ttl 过期时间 单位秒
+                cacheNames = CacheNames.ONLINE_TOKEN + "#" + tokenConfig.getTimeout() + "s";
+            }
+            CacheUtils.put(cacheNames, tokenValue, userOnline);
             log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue);
         } else if (userType == UserType.APP_USER) {
             // app端 自行根据业务编写
@@ -65,7 +68,7 @@ public class UserActionListener implements SaTokenListener {
      */
     @Override
     public void doLogout(String loginType, Object loginId, String tokenValue) {
-        RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+        CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue);
         log.info("user doLogout, useId:{}, token:{}", loginId, tokenValue);
     }
 
@@ -74,7 +77,7 @@ public class UserActionListener implements SaTokenListener {
      */
     @Override
     public void doKickout(String loginType, Object loginId, String tokenValue) {
-        RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+        CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue);
         log.info("user doLogoutByLoginId, useId:{}, token:{}", loginId, tokenValue);
     }
 
@@ -83,7 +86,7 @@ public class UserActionListener implements SaTokenListener {
      */
     @Override
     public void doReplaced(String loginType, Object loginId, String tokenValue) {
-        RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+        CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue);
         log.info("user doReplaced, useId:{}, token:{}", loginId, tokenValue);
     }
 

+ 2 - 12
ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/constant/OssConstant.java

@@ -11,19 +11,9 @@ import java.util.List;
 public interface OssConstant {
 
     /**
-     * OSS模块KEY
+     * 默认配置KEY
      */
-    String SYS_OSS_KEY = "sys_oss:";
-
-    /**
-     * 对象存储配置KEY
-     */
-    String OSS_CONFIG_KEY = "OssConfig";
-
-    /**
-     * 缓存配置KEY
-     */
-    String CACHE_CONFIG_KEY = SYS_OSS_KEY + OSS_CONFIG_KEY;
+    String DEFAULT_CONFIG_KEY = "sys_oss:default_config";
 
     /**
      * 预览列表资源开关Key

+ 7 - 5
ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java

@@ -1,11 +1,13 @@
 package com.ruoyi.common.oss.factory;
 
+import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.utils.JsonUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.oss.constant.OssConstant;
 import com.ruoyi.common.oss.core.OssClient;
 import com.ruoyi.common.oss.exception.OssException;
 import com.ruoyi.common.oss.properties.OssProperties;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.common.redis.utils.RedisUtils;
 import lombok.extern.slf4j.Slf4j;
 
@@ -27,7 +29,7 @@ public class OssFactory {
      */
     public static void init() {
         log.info("初始化OSS工厂");
-        RedisUtils.subscribe(OssConstant.CACHE_CONFIG_KEY, String.class, configKey -> {
+        RedisUtils.subscribe(OssConstant.DEFAULT_CONFIG_KEY, String.class, configKey -> {
             OssClient client = getClient(configKey);
             // 未初始化不处理
             if (client != null) {
@@ -42,7 +44,7 @@ public class OssFactory {
      */
     public static OssClient instance() {
         // 获取redis 默认类型
-        String configKey = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY);
+        String configKey = RedisUtils.getCacheObject(OssConstant.DEFAULT_CONFIG_KEY);
         if (StringUtils.isEmpty(configKey)) {
             throw new OssException("文件存储服务类型无法找到!");
         }
@@ -62,11 +64,11 @@ public class OssFactory {
     }
 
     private static void refresh(String configKey) {
-        Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + configKey);
-        OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class);
-        if (properties == null) {
+        String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
+        if (json == null) {
             throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
         }
+        OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
         CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
     }
 

+ 75 - 0
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/utils/CacheUtils.java

@@ -0,0 +1,75 @@
+package com.ruoyi.common.redis.utils;
+
+import com.ruoyi.common.core.utils.SpringUtils;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.redisson.api.RMap;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+
+import java.util.Set;
+
+/**
+ * 缓存操作工具类 {@link }
+ *
+ * @author Michelle.Chung
+ * @date 2022/8/13
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@SuppressWarnings(value = {"unchecked"})
+public class CacheUtils {
+
+    private static final CacheManager CACHE_MANAGER = SpringUtils.getBean(CacheManager.class);
+
+    /**
+     * 获取缓存组内所有的KEY
+     *
+     * @param cacheNames 缓存组名称
+     */
+    public static Set<Object> keys(String cacheNames) {
+        RMap<Object, Object> rmap = (RMap<Object, Object>) CACHE_MANAGER.getCache(cacheNames).getNativeCache();
+        return rmap.keySet();
+    }
+
+    /**
+     * 获取缓存值
+     *
+     * @param cacheNames 缓存组名称
+     * @param key        缓存key
+     */
+    public static <T> T get(String cacheNames, Object key) {
+        Cache.ValueWrapper wrapper = CACHE_MANAGER.getCache(cacheNames).get(key);
+        return wrapper != null ? (T) wrapper.get() : null;
+    }
+
+    /**
+     * 保存缓存值
+     *
+     * @param cacheNames 缓存组名称
+     * @param key        缓存key
+     * @param value      缓存值
+     */
+    public static void put(String cacheNames, Object key, Object value) {
+        CACHE_MANAGER.getCache(cacheNames).put(key, value);
+    }
+
+    /**
+     * 删除缓存值
+     *
+     * @param cacheNames 缓存组名称
+     * @param key        缓存key
+     */
+    public static void evict(String cacheNames, Object key) {
+        CACHE_MANAGER.getCache(cacheNames).evict(key);
+    }
+
+    /**
+     * 清空缓存值
+     *
+     * @param cacheNames 缓存组名称
+     */
+    public static void clear(String cacheNames) {
+        CACHE_MANAGER.getCache(cacheNames).clear();
+    }
+
+}

+ 1 - 1
ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/controller/SysOssController.java

@@ -95,7 +95,7 @@ public class SysOssController extends BaseController {
     @SaCheckPermission("system:oss:download")
     @GetMapping("/download/{ossId}")
     public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
-        SysOss sysOss = iSysOssService.getById(ossId);
+        SysOssVo sysOss = iSysOssService.getById(ossId);
         if (ObjectUtil.isNull(sysOss)) {
             throw new ServiceException("文件数据不存在!");
         }

+ 1 - 1
ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java

@@ -21,7 +21,7 @@ public interface ISysOssService {
 
     List<SysOssVo> listByIds(Collection<Long> ossIds);
 
-    SysOss getById(Long ossId);
+    SysOssVo getById(Long ossId);
 
     SysOss upload(MultipartFile file);
 

+ 9 - 21
ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java

@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.collect.Lists;
+import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.constant.UserConstants;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.JsonUtils;
@@ -16,6 +16,7 @@ import com.ruoyi.common.mybatis.core.page.PageQuery;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
 import com.ruoyi.common.oss.constant.OssConstant;
 import com.ruoyi.common.oss.factory.OssFactory;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.common.redis.utils.RedisUtils;
 import com.ruoyi.resource.domain.SysOssConfig;
 import com.ruoyi.resource.domain.bo.SysOssConfigBo;
@@ -54,7 +55,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
         for (SysOssConfig config : list) {
             String configKey = config.getConfigKey();
             if ("0".equals(config.getStatus())) {
-                RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, configKey);
+                RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, configKey);
             }
             setConfigCache(true, config);
         }
@@ -120,16 +121,15 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
                 throw new ServiceException("系统内置, 不可删除!");
             }
         }
-        List<SysOssConfig> list = Lists.newArrayList();
+        List<SysOssConfig> list = CollUtil.newArrayList();
         for (Long configId : ids) {
             SysOssConfig config = baseMapper.selectById(configId);
             list.add(config);
         }
         boolean flag = baseMapper.deleteBatchIds(ids) > 0;
         if (flag) {
-            list.forEach(sysOssConfig -> {
-                RedisUtils.deleteObject(getCacheKey(sysOssConfig.getConfigKey()));
-            });
+            list.forEach(sysOssConfig ->
+                CacheUtils.evict(CacheNames.SYS_OSS_CONFIG, sysOssConfig.getConfigKey()));
         }
         return flag;
     }
@@ -159,21 +159,11 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
             .set(SysOssConfig::getStatus, "1"));
         row += baseMapper.updateById(sysOssConfig);
         if (row > 0) {
-            RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey());
+            RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, sysOssConfig.getConfigKey());
         }
         return row;
     }
 
-    /**
-     * 设置cache key
-     *
-     * @param configKey 参数键
-     * @return 缓存键key
-     */
-    private String getCacheKey(String configKey) {
-        return OssConstant.SYS_OSS_KEY + configKey;
-    }
-
     /**
      * 如果操作成功 则更新缓存
      *
@@ -183,10 +173,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
      */
     private boolean setConfigCache(boolean flag, SysOssConfig config) {
         if (flag) {
-            RedisUtils.setCacheObject(
-                getCacheKey(config.getConfigKey()),
-                JsonUtils.toJsonString(config));
-            RedisUtils.publish(OssConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> {
+            CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
+            RedisUtils.publish(OssConstant.DEFAULT_CONFIG_KEY, config.getConfigKey(), msg -> {
                 log.info("发布刷新OSS配置 => " + msg);
             });
         }

+ 8 - 11
ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java

@@ -4,26 +4,25 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.mybatis.core.page.PageQuery;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
-import com.ruoyi.common.oss.constant.OssConstant;
 import com.ruoyi.common.oss.core.OssClient;
 import com.ruoyi.common.oss.entity.UploadResult;
 import com.ruoyi.common.oss.factory.OssFactory;
-import com.ruoyi.common.redis.utils.RedisUtils;
 import com.ruoyi.resource.domain.SysOss;
 import com.ruoyi.resource.domain.bo.SysOssBo;
 import com.ruoyi.resource.domain.vo.SysOssVo;
 import com.ruoyi.resource.mapper.SysOssMapper;
 import com.ruoyi.resource.service.ISysOssService;
 import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -51,13 +50,10 @@ public class SysOssServiceImpl implements ISysOssService {
     public List<SysOssVo> listByIds(Collection<Long> ossIds) {
         List<SysOssVo> list = new ArrayList<>();
         for (Long id : ossIds) {
-            String key = OssConstant.SYS_OSS_KEY + id;
-            SysOssVo vo = RedisUtils.getCacheObject(key);
-            if (ObjectUtil.isNull(vo)) {
-                vo = baseMapper.selectVoById(id);
-                RedisUtils.setCacheObject(key, vo, Duration.ofDays(30));
+            SysOssVo vo = getById(id);
+            if (ObjectUtil.isNotNull(vo)) {
+                list.add(vo);
             }
-            list.add(vo);
         }
         return list;
     }
@@ -76,9 +72,10 @@ public class SysOssServiceImpl implements ISysOssService {
         return lqw;
     }
 
+    @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId")
     @Override
-    public SysOss getById(Long ossId) {
-        return baseMapper.selectById(ossId);
+    public SysOssVo getById(Long ossId) {
+        return baseMapper.selectVoById(ossId);
     }
 
     @Override

+ 6 - 3
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java

@@ -81,7 +81,8 @@ public class SysConfigController extends BaseController {
         if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
             return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
         }
-        return toAjax(configService.insertConfig(config));
+        configService.insertConfig(config);
+        return R.ok();
     }
 
     /**
@@ -94,7 +95,8 @@ public class SysConfigController extends BaseController {
         if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
             return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
         }
-        return toAjax(configService.updateConfig(config));
+        configService.updateConfig(config);
+        return R.ok();
     }
 
     /**
@@ -104,7 +106,8 @@ public class SysConfigController extends BaseController {
     @Log(title = "参数管理", businessType = BusinessType.UPDATE)
     @PutMapping("/updateByKey")
     public R<Void> updateByKey(@RequestBody SysConfig config) {
-        return toAjax(configService.updateConfig(config));
+        configService.updateConfig(config);
+        return R.ok();
     }
 
     /**

+ 4 - 2
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java

@@ -86,7 +86,8 @@ public class SysDictDataController extends BaseController {
     @Log(title = "字典数据", businessType = BusinessType.INSERT)
     @PostMapping
     public R<Void> add(@Validated @RequestBody SysDictData dict) {
-        return toAjax(dictDataService.insertDictData(dict));
+        dictDataService.insertDictData(dict);
+        return R.ok();
     }
 
     /**
@@ -96,7 +97,8 @@ public class SysDictDataController extends BaseController {
     @Log(title = "字典数据", businessType = BusinessType.UPDATE)
     @PutMapping
     public R<Void> edit(@Validated @RequestBody SysDictData dict) {
-        return toAjax(dictDataService.updateDictData(dict));
+        dictDataService.updateDictData(dict);
+        return R.ok();
     }
 
     /**

+ 4 - 2
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java

@@ -72,7 +72,8 @@ public class SysDictTypeController extends BaseController {
         if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
             return R.fail("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
         }
-        return toAjax(dictTypeService.insertDictType(dict));
+        dictTypeService.insertDictType(dict);
+        return R.ok();
     }
 
     /**
@@ -85,7 +86,8 @@ public class SysDictTypeController extends BaseController {
         if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
             return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
         }
-        return toAjax(dictTypeService.updateDictType(dict));
+        dictTypeService.updateDictType(dict);
+        return R.ok();
     }
 
     /**

+ 4 - 2
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.exception.NotLoginException;
 import cn.dev33.satoken.stp.StpUtil;
 import com.ruoyi.common.core.constant.CacheConstants;
+import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.StreamUtils;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -11,7 +12,7 @@ import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
-import com.ruoyi.common.redis.utils.RedisUtils;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.system.api.domain.SysUserOnline;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
@@ -48,7 +49,8 @@ public class SysUserOnlineController extends BaseController {
             if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < 0) {
                 continue;
             }
-            userOnlineList.add(RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token));
+            SysUserOnline dto = CacheUtils.get(CacheNames.ONLINE_TOKEN, token);
+            userOnlineList.add(dto);
         }
         if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
             userOnlineList = StreamUtils.filter(userOnlineList, userOnline ->

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java

@@ -45,7 +45,7 @@ public interface ISysConfigService {
      * @param config 参数配置信息
      * @return 结果
      */
-    int insertConfig(SysConfig config);
+    String insertConfig(SysConfig config);
 
     /**
      * 修改参数配置
@@ -53,7 +53,7 @@ public interface ISysConfigService {
      * @param config 参数配置信息
      * @return 结果
      */
-    int updateConfig(SysConfig config);
+    String updateConfig(SysConfig config);
 
     /**
      * 批量删除参数信息

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java

@@ -53,7 +53,7 @@ public interface ISysDictDataService {
      * @param dictData 字典数据信息
      * @return 结果
      */
-    int insertDictData(SysDictData dictData);
+    List<SysDictData> insertDictData(SysDictData dictData);
 
     /**
      * 修改保存字典数据信息
@@ -61,5 +61,5 @@ public interface ISysDictDataService {
      * @param dictData 字典数据信息
      * @return 结果
      */
-    int updateDictData(SysDictData dictData);
+    List<SysDictData> updateDictData(SysDictData dictData);
 }

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java

@@ -83,7 +83,7 @@ public interface ISysDictTypeService {
      * @param dictType 字典类型信息
      * @return 结果
      */
-    int insertDictType(SysDictType dictType);
+    List<SysDictData> insertDictType(SysDictType dictType);
 
     /**
      * 修改保存字典类型信息
@@ -91,7 +91,7 @@ public interface ISysDictTypeService {
      * @param dictType 字典类型信息
      * @return 结果
      */
-    int updateDictType(SysDictType dictType);
+    List<SysDictData> updateDictType(SysDictType dictType);
 
     /**
      * 校验字典类型称是否唯一

+ 17 - 30
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java

@@ -1,24 +1,24 @@
 package com.ruoyi.system.service.impl;
 
-import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.constant.CacheConstants;
+import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.constant.UserConstants;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.mybatis.core.page.PageQuery;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
-import com.ruoyi.common.redis.utils.RedisUtils;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.service.ISysConfigService;
 import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
@@ -63,16 +63,12 @@ public class SysConfigServiceImpl implements ISysConfigService {
      * @param configKey 参数key
      * @return 参数键值
      */
+    @Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey")
     @Override
     public String selectConfigByKey(String configKey) {
-        String configValue = Convert.toStr(RedisUtils.getCacheObject(getCacheKey(configKey)));
-        if (StringUtils.isNotEmpty(configValue)) {
-            return configValue;
-        }
         SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
             .eq(SysConfig::getConfigKey, configKey));
         if (ObjectUtil.isNotNull(retConfig)) {
-            RedisUtils.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
             return retConfig.getConfigValue();
         }
         return StringUtils.EMPTY;
@@ -102,13 +98,14 @@ public class SysConfigServiceImpl implements ISysConfigService {
      * @param config 参数配置信息
      * @return 结果
      */
+    @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
     @Override
-    public int insertConfig(SysConfig config) {
+    public String insertConfig(SysConfig config) {
         int row = baseMapper.insert(config);
         if (row > 0) {
-            RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+            return config.getConfigValue();
         }
-        return row;
+        throw new ServiceException("操作失败");
     }
 
     /**
@@ -117,8 +114,9 @@ public class SysConfigServiceImpl implements ISysConfigService {
      * @param config 参数配置信息
      * @return 结果
      */
+    @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
     @Override
-    public int updateConfig(SysConfig config) {
+    public String updateConfig(SysConfig config) {
         int row = 0;
         if (config.getConfigId() != null) {
             row = baseMapper.updateById(config);
@@ -127,9 +125,9 @@ public class SysConfigServiceImpl implements ISysConfigService {
                 .eq(SysConfig::getConfigKey, config.getConfigKey()));
         }
         if (row > 0) {
-            RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+            return config.getConfigValue();
         }
-        return row;
+        throw new ServiceException("操作失败");
     }
 
     /**
@@ -144,7 +142,7 @@ public class SysConfigServiceImpl implements ISysConfigService {
             if (StringUtils.equals(UserConstants.YES, config.getConfigType())) {
                 throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
             }
-            RedisUtils.deleteObject(getCacheKey(config.getConfigKey()));
+            CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey());
         }
         baseMapper.deleteBatchIds(Arrays.asList(configIds));
     }
@@ -155,9 +153,8 @@ public class SysConfigServiceImpl implements ISysConfigService {
     @Override
     public void loadingConfigCache() {
         List<SysConfig> configsList = selectConfigList(new SysConfig());
-        for (SysConfig config : configsList) {
-            RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
-        }
+        configsList.forEach(config ->
+            CacheUtils.put(CacheNames.SYS_CONFIG, config.getConfigKey(), config.getConfigValue()));
     }
 
     /**
@@ -165,8 +162,7 @@ public class SysConfigServiceImpl implements ISysConfigService {
      */
     @Override
     public void clearConfigCache() {
-        Collection<String> keys = RedisUtils.keys(CacheConstants.SYS_CONFIG_KEY + "*");
-        RedisUtils.deleteObject(keys);
+        CacheUtils.clear(CacheNames.SYS_CONFIG);
     }
 
     /**
@@ -194,13 +190,4 @@ public class SysConfigServiceImpl implements ISysConfigService {
         return UserConstants.UNIQUE;
     }
 
-    /**
-     * 设置cache key
-     *
-     * @param configKey 参数键
-     * @return 缓存键key
-     */
-    private String getCacheKey(String configKey) {
-        return CacheConstants.SYS_CONFIG_KEY + configKey;
-    }
 }

+ 13 - 11
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java

@@ -2,14 +2,17 @@ package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.constant.CacheNames;
+import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.dict.utils.DictUtils;
 import com.ruoyi.common.mybatis.core.page.PageQuery;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.system.api.domain.SysDictData;
 import com.ruoyi.system.mapper.SysDictDataMapper;
 import com.ruoyi.system.service.ISysDictDataService;
 import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.CachePut;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -88,8 +91,7 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
         for (Long dictCode : dictCodes) {
             SysDictData data = selectDictDataById(dictCode);
             baseMapper.deleteById(dictCode);
-            List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType());
-            DictUtils.setDictCache(data.getDictType(), dictDatas);
+            CacheUtils.evict(CacheNames.SYS_DICT, data.getDictType());
         }
     }
 
@@ -99,14 +101,14 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
      * @param data 字典数据信息
      * @return 结果
      */
+    @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType")
     @Override
-    public int insertDictData(SysDictData data) {
+    public List<SysDictData> insertDictData(SysDictData data) {
         int row = baseMapper.insert(data);
         if (row > 0) {
-            List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType());
-            DictUtils.setDictCache(data.getDictType(), dictDatas);
+            return baseMapper.selectDictDataByType(data.getDictType());
         }
-        return row;
+        throw new ServiceException("操作失败");
     }
 
     /**
@@ -115,13 +117,13 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
      * @param data 字典数据信息
      * @return 结果
      */
+    @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType")
     @Override
-    public int updateDictData(SysDictData data) {
+    public List<SysDictData> updateDictData(SysDictData data) {
         int row = baseMapper.updateById(data);
         if (row > 0) {
-            List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType());
-            DictUtils.setDictCache(data.getDictType(), dictDatas);
+            return baseMapper.selectDictDataByType(data.getDictType());
         }
-        return row;
+        throw new ServiceException("操作失败");
     }
 }

+ 21 - 22
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java

@@ -5,26 +5,26 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.constant.UserConstants;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StreamUtils;
 import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.dict.utils.DictUtils;
 import com.ruoyi.common.mybatis.core.page.PageQuery;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.system.api.domain.SysDictData;
 import com.ruoyi.system.api.domain.SysDictType;
 import com.ruoyi.system.mapper.SysDictDataMapper;
 import com.ruoyi.system.mapper.SysDictTypeMapper;
 import com.ruoyi.system.service.ISysDictTypeService;
 import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 字典 业务层处理
@@ -84,17 +84,13 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
      * @param dictType 字典类型
      * @return 字典数据集合信息
      */
+    @Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType")
     @Override
     public List<SysDictData> selectDictDataByType(String dictType) {
-        List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
+        List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType);
         if (CollUtil.isNotEmpty(dictDatas)) {
             return dictDatas;
         }
-        dictDatas = dictDataMapper.selectDictDataByType(dictType);
-        if (CollUtil.isNotEmpty(dictDatas)) {
-            DictUtils.setDictCache(dictType, dictDatas);
-            return dictDatas;
-        }
         return null;
     }
 
@@ -115,6 +111,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
      * @param dictType 字典类型
      * @return 字典类型
      */
+    @Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType")
     @Override
     public SysDictType selectDictTypeByType(String dictType) {
         return baseMapper.selectById(new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getDictType, dictType));
@@ -133,7 +130,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
                 .eq(SysDictData::getDictType, dictType.getDictType()))) {
                 throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
             }
-            DictUtils.removeDictCache(dictType.getDictType());
+            CacheUtils.evict(CacheNames.SYS_DICT, dictType.getDictType());
         }
         baseMapper.deleteBatchIds(Arrays.asList(dictIds));
     }
@@ -146,9 +143,9 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
         List<SysDictData> dictDataList = dictDataMapper.selectList(
             new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getStatus, UserConstants.DICT_NORMAL));
         Map<String, List<SysDictData>> dictDataMap = StreamUtils.groupByKey(dictDataList, SysDictData::getDictType);
-        dictDataMap.forEach((k, v) -> {
+        dictDataMap.forEach((k,v) -> {
             List<SysDictData> dictList = StreamUtils.sorted(v, Comparator.comparing(SysDictData::getDictSort));
-            DictUtils.setDictCache(k, dictList);
+            CacheUtils.put(CacheNames.SYS_DICT, k, dictList);
         });
     }
 
@@ -157,7 +154,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
      */
     @Override
     public void clearDictCache() {
-        DictUtils.clearDictCache();
+        CacheUtils.clear(CacheNames.SYS_DICT);
     }
 
     /**
@@ -175,13 +172,14 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
      * @param dict 字典类型信息
      * @return 结果
      */
+    @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType")
     @Override
-    public int insertDictType(SysDictType dict) {
+    public List<SysDictData> insertDictType(SysDictType dict) {
         int row = baseMapper.insert(dict);
         if (row > 0) {
-            DictUtils.setDictCache(dict.getDictType(), null);
+            return new ArrayList<>();
         }
-        return row;
+        throw new ServiceException("操作失败");
     }
 
     /**
@@ -190,19 +188,20 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
      * @param dict 字典类型信息
      * @return 结果
      */
+    @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType")
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int updateDictType(SysDictType dict) {
+    public List<SysDictData> updateDictType(SysDictType dict) {
         SysDictType oldDict = baseMapper.selectById(dict.getDictId());
         dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>()
             .set(SysDictData::getDictType, dict.getDictType())
             .eq(SysDictData::getDictType, oldDict.getDictType()));
         int row = baseMapper.updateById(dict);
         if (row > 0) {
-            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
-            DictUtils.setDictCache(dict.getDictType(), dictDatas);
+            CacheUtils.evict(CacheNames.SYS_DICT, oldDict.getDictType());
+            return dictDataMapper.selectDictDataByType(dict.getDictType());
         }
-        return row;
+        throw new ServiceException("操作失败");
     }
 
     /**