• 若依系统分离版去除redis数据库


    1 去除redis 配置

    去除ruoyi-admin下application.yml的redis配置
    在这里插入图片描述

    2 去除ruoyi-framework下RedisConfig的配置

    直接注释@Bean、@Configuration@EnableCaching注解就可以了,不用删除RedisConfig,防止后期又要使用redis,直接放开就可以了。
    在这里插入图片描述

    3 在ruoyi-common的core/redis下新建MyCache类

    新建MyCache类并实现Cache,内容如下,可以自由扩展相关功能。
    在这里插入图片描述

    • 新建MyCache
    package com.ruoyi.common.core.redis;
    
    import org.springframework.cache.Cache;
    import org.springframework.cache.support.SimpleValueWrapper;
    import org.springframework.stereotype.Component;
    
    import java.util.Collection;
    import java.util.Map;
    import java.util.Objects;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ConcurrentHashMap;
    
    @Component
    public class MyCache implements Cache {
    
        // 使用ConcurrentHashMap作为数据的存储
        private Map<String, Object> storage = new ConcurrentHashMap<>();
    
        // getName获取cache的名称,存取数据的时候用来区分是针对哪个cache操作
        @Override
        public String getName() {
            return null;
        }
    
        @Override
        public Object getNativeCache() {
            return null;
        }
    
        public boolean hasKey(String key){
            return storage.containsKey(key);
        }
    
        @Override
        public ValueWrapper get(Object key) {
            String k = key.toString();
            Object value = storage.get(k);
    
            // 注意返回的数据,要和存放时接收到数据保持一致,要将数据反序列化回来。
            return Objects.isNull(value) ? null : new SimpleValueWrapper(value);
        }
    
        @Override
        public <T> T get(Object key, Class<T> type) {
            return null;
        }
    
        @Override
        public <T> T get(Object key, Callable<T> valueLoader) {
            return null;
        }
    
        // put方法,就是执行将数据进行缓存
        @Override
        public void put(Object key, Object value) {
            if (Objects.isNull(value)) {
                return;
            }
            //存值
            storage.put(key.toString(), value);
        }
    
        // evict方法,是用来清除某个缓存项
        @Override
        public void evict(Object key) {
            storage.remove(key.toString());
        }
    
        // 删除集合
        public boolean deleteObject(final Collection collection){
            collection.forEach(o -> {
                storage.remove(o.toString());
            } );
            return true;
        }
    
        // 获取所有的keys
        public Collection<String> keys(final String pattern){
            return storage.keySet();
        }
    
        @Override
        public void clear() {
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    4 修改RedisCache类

    • 内容如下,原代码不删除,注释掉,防止后期又使用redis
      在这里插入图片描述
    package com.ruoyi.common.core.redis;
    
    import org.springframework.cache.Cache;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import java.util.Collection;
    import java.util.concurrent.TimeUnit;
    
    /**
     * spring redis 工具类
     *
     * @author ruoyi
     **/
    @SuppressWarnings(value = { "unchecked", "rawtypes" })
    @Component
    public class RedisCache
    {
    //    @Autowired
    //    public RedisTemplate redisTemplate;
    
        @Resource
        public MyCache myCache;
    
        /**
         * 缓存基本的对象,Integer、String、实体类等
         *
         * @param key 缓存的键值
         * @param value 缓存的值
         */
        public <T> void setCacheObject(final String key, final T value)
        {
            myCache.put(key,value);
    //        redisTemplate.opsForValue().set(key, value);
        }
    
        /**
         * 缓存基本的对象,Integer、String、实体类等
         *
         * @param key 缓存的键值
         * @param value 缓存的值
         * @param timeout 时间
         * @param timeUnit 时间颗粒度
         */
        public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
        {
            myCache.put(key,value);
    //        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
        }
    
        /**
         * 设置有效时间
         *
         * @param key Redis键
         * @param timeout 超时时间
         * @return true=设置成功;false=设置失败
         */
        public boolean expire(final String key, final long timeout)
        {
            return expire(key, timeout, TimeUnit.SECONDS);
        }
    
        /**
         * 设置有效时间
         *
         * @param key Redis键
         * @param timeout 超时时间
         * @param unit 时间单位
         * @return true=设置成功;false=设置失败
         */
        public boolean expire(final String key, final long timeout, final TimeUnit unit)
        {
            return true;
    //        return redisTemplate.expire(key, timeout, unit);
        }
    
        /**
         * 获取有效时间
         *
         * @param key Redis键
         * @return 有效时间
         */
    //    public long getExpire(final String key)
    //    {
    //        return redisTemplate.getExpire(key);
    //    }
    
        /**
         * 判断 key是否存在
         *
         * @param key 键
         * @return true 存在 false不存在
         */
        public Boolean hasKey(String key)
        {
            return myCache.hasKey(key);
    //        return redisTemplate.hasKey(key);
        }
    
        /**
         * 获得缓存的基本对象。
         *
         * @param key 缓存键值
         * @return 缓存键值对应的数据
         */
        public <T> T getCacheObject(final String key)
        {
            Cache.ValueWrapper valueWrapper = myCache.get(key);
            if (valueWrapper == null){
                return null;
            }else {
                return (T) valueWrapper.get();
            }
    //        ValueOperations operation = redisTemplate.opsForValue();
    //        return operation.get(key);
        }
    
        /**
         * 删除单个对象
         *
         * @param key
         */
        public boolean deleteObject(final String key)
        {
            myCache.evict(key);
            return true;
    //        return redisTemplate.delete(key);
        }
    
        /**
         * 删除集合对象
         *
         * @param collection 多个对象
         * @return
         */
        public boolean deleteObject(final Collection collection)
        {
            return myCache.deleteObject(collection);
    //        return redisTemplate.delete(collection) > 0;
        }
    
        /**
         * 缓存List数据
         *
         * @param key 缓存的键值
         * @param dataList 待缓存的List数据
         * @return 缓存的对象
         */
    //    public  long setCacheList(final String key, final List dataList)
    //    {
    //        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
    //        return count == null ? 0 : count;
    //    }
    
        /**
         * 获得缓存的list对象
         *
         * @param key 缓存的键值
         * @return 缓存键值对应的数据
         */
    //    public  List getCacheList(final String key)
    //    {
    //        return redisTemplate.opsForList().range(key, 0, -1);
    //    }
    
        /**
         * 缓存Set
         *
         * @param key 缓存键值
         * @param dataSet 缓存的数据
         * @return 缓存数据的对象
         */
    //    public  BoundSetOperations setCacheSet(final String key, final Set dataSet)
    //    {
    //        BoundSetOperations setOperation = redisTemplate.boundSetOps(key);
    //        Iterator it = dataSet.iterator();
    //        while (it.hasNext())
    //        {
    //            setOperation.add(it.next());
    //        }
    //        return setOperation;
    //    }
    
        /**
         * 获得缓存的set
         *
         * @param key
         * @return
         */
    //    public  Set getCacheSet(final String key)
    //    {
    //        return redisTemplate.opsForSet().members(key);
    //    }
    
        /**
         * 缓存Map
         *
         * @param key
         * @param dataMap
         */
    //    public  void setCacheMap(final String key, final Map dataMap)
    //    {
    //        if (dataMap != null) {
    //            redisTemplate.opsForHash().putAll(key, dataMap);
    //        }
    //    }
    
        /**
         * 获得缓存的Map
         *
         * @param key
         * @return
         */
    //    public  Map getCacheMap(final String key)
    //    {
    //        return redisTemplate.opsForHash().entries(key);
    //    }
    
        /**
         * 往Hash中存入数据
         *
         * @param key Redis键
         * @param hKey Hash键
         * @param value 值
         */
    //    public  void setCacheMapValue(final String key, final String hKey, final T value)
    //    {
    //        redisTemplate.opsForHash().put(key, hKey, value);
    //    }
    
        /**
         * 获取Hash中的数据
         *
         * @param key Redis键
         * @param hKey Hash键
         * @return Hash中的对象
         */
    //    public  T getCacheMapValue(final String key, final String hKey)
    //    {
    //        HashOperations opsForHash = redisTemplate.opsForHash();
    //        return opsForHash.get(key, hKey);
    //    }
    
        /**
         * 获取多个Hash中的数据
         *
         * @param key Redis键
         * @param hKeys Hash键集合
         * @return Hash对象集合
         */
    //    public  List getMultiCacheMapValue(final String key, final Collection hKeys)
    //    {
    //        return redisTemplate.opsForHash().multiGet(key, hKeys);
    //    }
    
        /**
         * 删除Hash中的某条数据
         *
         * @param key Redis键
         * @param hKey Hash键
         * @return 是否成功
         */
    //    public boolean deleteCacheMapValue(final String key, final String hKey)
    //    {
    //        return redisTemplate.opsForHash().delete(key, hKey) > 0;
    //    }
    
        /**
         * 获得缓存的基本对象列表
         *
         * @param pattern 字符串前缀
         * @return 对象列表
         */
        public Collection<String> keys(final String pattern)
        {
            return myCache.keys(pattern);
    //        return redisTemplate.keys(pattern);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279

    5 修改ruoyi-common下utils/DictUtils

    在这里插入图片描述

    • 内容如下:
        /**
         * 获取字典缓存
         *
         * @param key 参数键
         * @return dictDatas 字典数据列表
         */
        public static List<SysDictData> getDictCache(String key)
        {
            JSONArray arrayCache = JSONArray.parseArray(JSON.toJSONString(SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key))));
    //        JSONArray arrayCache = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
            if (StringUtils.isNotNull(arrayCache))
            {
                return arrayCache.toList(SysDictData.class);
            }
            return null;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6 基于redis的限流处理就无法使用了,先注释掉

    • 这里先注释相关注解,暂时不删除,防止以后,又需要redis了,放开就行。
      在这里插入图片描述

    7 重启就可以了

    在这里插入图片描述

  • 相关阅读:
    ASP.Net Core异步编程
    Linux学习-61-Linux系统服务管理
    【译】32位 .NET Framework 项目的 WinForm 设计器选择
    docker快速入门
    搞懂了Vue对象与实例的区别!
    双剑合璧:基于Elasticsearch的两路召回语义检索系统,实现关键字与语义的高效精准匹配
    Android多线程学习:线程池(二)
    操作系统【OS】线程的分类
    【读书后台管理系统】—前端框架搭建(一)
    【poi导出excel模板——通过建造者模式+策略模式+函数式接口实现】
  • 原文地址:https://blog.csdn.net/weixin_43684214/article/details/127773165