文章目录

  • 1 去除redis 配置
  • 2 去除ruoyi-framework下RedisConfig的配置
  • 3 在ruoyi-common的core/redis下新建MyCache类
  • 4 修改RedisCache类
  • 5 修改ruoyi-common下utils/DictUtils
  • 6 基于redis的限流处理就无法使用了,先注释掉
  • 7 重启就可以了

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操作@Overridepublic String getName() {return null;}@Overridepublic Object getNativeCache() {return null;}public boolean hasKey(String key){return storage.containsKey(key);}@Overridepublic ValueWrapper get(Object key) {String k = key.toString();Object value = storage.get(k);// 注意返回的数据,要和存放时接收到数据保持一致,要将数据反序列化回来。return Objects.isNull(value) ? null : new SimpleValueWrapper(value);}@Overridepublic <T> T get(Object key, Class<T> type) {return null;}@Overridepublic <T> T get(Object key, Callable<T> valueLoader) {return null;}// put方法,就是执行将数据进行缓存@Overridepublic void put(Object key, Object value) {if (Objects.isNull(value)) {return;}//存值storage.put(key.toString(), value);}// evict方法,是用来清除某个缓存项@Overridepublic void evict(Object key) {storage.remove(key.toString());}// 删除集合public boolean deleteObject(final Collection collection){collection.forEach(o -> {storage.remove(o.toString());} );return true;}// 获取所有的keyspublic Collection<String> keys(final String pattern){return storage.keySet();}@Overridepublic void clear() {}
}

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;@Resourcepublic 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<String, T> 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 <T> long setCacheList(final String key, final List<T> dataList)
//    {
//        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
//        return count == null ? 0 : count;
//    }/*** 获得缓存的list对象** @param key 缓存的键值* @return 缓存键值对应的数据*/
//    public <T> List<T> getCacheList(final String key)
//    {
//        return redisTemplate.opsForList().range(key, 0, -1);
//    }/*** 缓存Set** @param key 缓存键值* @param dataSet 缓存的数据* @return 缓存数据的对象*/
//    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
//    {
//        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
//        Iterator<T> it = dataSet.iterator();
//        while (it.hasNext())
//        {
//            setOperation.add(it.next());
//        }
//        return setOperation;
//    }/*** 获得缓存的set** @param key* @return*/
//    public <T> Set<T> getCacheSet(final String key)
//    {
//        return redisTemplate.opsForSet().members(key);
//    }/*** 缓存Map** @param key* @param dataMap*/
//    public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
//    {
//        if (dataMap != null) {
//            redisTemplate.opsForHash().putAll(key, dataMap);
//        }
//    }/*** 获得缓存的Map** @param key* @return*/
//    public <T> Map<String, T> getCacheMap(final String key)
//    {
//        return redisTemplate.opsForHash().entries(key);
//    }/*** 往Hash中存入数据** @param key Redis键* @param hKey Hash键* @param value 值*/
//    public <T> 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> T getCacheMapValue(final String key, final String hKey)
//    {
//        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
//        return opsForHash.get(key, hKey);
//    }/*** 获取多个Hash中的数据** @param key Redis键* @param hKeys Hash键集合* @return Hash对象集合*/
//    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> 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);}
}

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

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

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

7 重启就可以了

若依系统分离版去除redis数据库相关推荐

  1. 若依前后端分离版怎样根据数据库生成代码并快速实现某业务的增删改查

    场景 使用若依的前后端分离版,怎样使用其代码生成实现对单表的增删改查导出的业务. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程 ...

  2. 若依前后端分离版数据库已经存在的字典添加一条后刷新没作用,必须清除Redis缓存

    场景 使用若依的前后端分离版,前端下拉框的使用直接查询的是字典表中的数据. 对于某个类型的字典如果之前已经添加过并使用过,后来想要再添加一条此类型的字典. 在数据库中添加后,前端刷新下,发现没有获取到 ...

  3. Redis数据库如何实现读写分离

    2019独角兽企业重金招聘Python工程师标准>>> Redis是一种NoSQL的文档数据库,通过key-value的结构存储在内存中,Redis读的速度是110000次/s,写的 ...

  4. MySQL与Redis数据库结合——redis作为mysql的缓存服务器,实现读写分离(nginx+php+redis+mysql)

    文章目录 一.读写分离的背景 二.搭建nginx+php+redis+mysql 实验环境 实验 1.在server1上安装nginx+php 建立php和redis,mysql的连接 2.在serv ...

  5. Redis数据库教程——系统详解学习Redis全过程

    Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统:     Key-Value Store是当下比较流行的话题,尤其 ...

  6. java计算机毕业设计前后端分离健身房管理系统源代码+数据库+系统+lw文档

    java计算机毕业设计前后端分离健身房管理系统源代码+数据库+系统+lw文档 java计算机毕业设计前后端分离健身房管理系统源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语 ...

  7. 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...

  8. 1. Redis数据库-安装(到Linux系统中)

    安装Redis数据库 一.下载 二.安装gcc 三.安装redis-6.2.6 四.测试 一.下载 Redis官网: https://redis.io/. 点击Download it下的下载链接直接下 ...

  9. 浪擎镜像系统2008版 增强数据库实时备份容灾

          国内著名的备份容灾厂商浪擎科技发布其针对中高端用户的应用容灾产品 - 浪擎·镜像系统2008版.2008版本新增或增强: SQLServer 数据库实时复制. Oracle 数据库实时复制 ...

最新文章

  1. matlab中cumsum函数的使用
  2. 【c语言】输入天数,求这天是全年的第几周的第几天
  3. 深入了解java线程池
  4. /etc/sysctl.conf参数解释
  5. 他手边有太多事要做了
  6. 杭电1018 Big Number
  7. SVT-AV1:开源编解码最新进展
  8. linux nice启动vi程序,Linux nice命令
  9. htc思想[second]
  10. WiFi Interface 的 name 如何获取到
  11. 推荐一个下载简历模板的网站工具
  12. 摄像头云台的设计,组装与使用方法
  13. 局域网内两台电脑ping不通
  14. 北京爷们儿跟北京妞儿 倍儿靠谱儿-----女人篇
  15. 对称、群论与魔术(五)——真实扑克牌图案的对称性探索
  16. iOS集成支付宝支付 Alipay
  17. centos 更新时间
  18. 天线学习笔记——串馈网络设计
  19. 概率论抽球 模型 汇总
  20. MySQL 计算环比(同比类似)

热门文章

  1. 十大经典三维动画制作软件
  2. 基础算法 - 树的直径
  3. JS base64编码解码实战
  4. 蓝屏总结(一) ——基本分析方法
  5. 脑裂产生以及解决办法(转载)
  6. LTE学习:PHICH(一)
  7. 深入理解Pytorch负对数似然函数(torch.nn.NLLLoss)和交叉熵损失函数(torch.nn.CrossEntropyLoss)
  8. 支持tcam的服务器,一种支持TCAM规则更新与压缩方法.doc
  9. 关于Protel 2004 绘制电路原理图——遇到的一些小问题
  10. c语言中字符串的子式咋样输出,C语言常用代码