Files
loan-pricing/doc/2026-04-15-移除Redis依赖改造为内存缓存后端实施记录.md

4.1 KiB

移除 Redis 依赖改造为内存缓存后端实施记录

1. 实际改动内容

1.1 新增内存缓存底座

新增文件:

  • ruoyi-common/src/main/java/com/ruoyi/common/core/cache/InMemoryCacheEntry.java
  • ruoyi-common/src/main/java/com/ruoyi/common/core/cache/InMemoryCacheStats.java
  • ruoyi-common/src/main/java/com/ruoyi/common/core/cache/InMemoryCacheStore.java

实现内容:

  • 使用 ConcurrentHashMap 存储缓存值
  • 支持 TTL、过期清理、按前缀查询 key、批量删除
  • 支持计数器递增能力,供限流使用
  • 提供命中、未命中、过期、写入、总键数统计快照

1.2 改造缓存门面

修改文件:

  • ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java

改造内容:

  • 保留原 RedisCache 业务入口
  • 移除 RedisTemplate 依赖
  • 底层改为委托 InMemoryCacheStore
  • 补充 incrementgetCacheStatsclear 能力

1.3 改造限流与缓存监控

修改文件:

  • ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
  • ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java

改造内容:

  • RateLimiterAspect 删除 Lua + Redis 依赖,改为内存计数
  • CacheController 改为返回内存缓存统计与缓存内容
  • 缓存清理接口改为操作本地缓存门面

1.4 删除 Redis 配置与依赖

修改文件:

  • ruoyi-common/pom.xml
  • ruoyi-framework/pom.xml
  • ruoyi-admin/pom.xml
  • ruoyi-admin/src/main/resources/application.yml

删除文件:

  • ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
  • ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java

处理结果:

  • 删除 spring-boot-starter-data-redis
  • 删除 commons-pool2
  • 删除 spring.redis 配置块
  • 删除 Redis 专属配置类
  • ruoyi-commonruoyi-frameworkruoyi-admin 增加 spring-boot-starter-test 测试依赖

1.5 新增后端测试

新增文件:

  • ruoyi-common/src/test/java/com/ruoyi/common/core/cache/InMemoryCacheStoreTest.java
  • ruoyi-common/src/test/java/com/ruoyi/common/core/redis/RedisCacheTest.java
  • ruoyi-framework/src/test/java/com/ruoyi/framework/aspectj/RateLimiterAspectTest.java
  • ruoyi-framework/src/test/java/com/ruoyi/framework/web/service/TokenServiceLocalCacheTest.java
  • ruoyi-admin/src/test/java/com/ruoyi/web/controller/monitor/CacheControllerTest.java

覆盖内容:

  • 内存缓存读写 / TTL / keys / 统计
  • 缓存门面能力
  • 限流计数
  • token 登录态缓存
  • 验证码删除
  • 防重提交毫秒级窗口
  • 缓存监控接口

2. 执行结果

2.1 验证命令

已执行:

  • mvn -pl ruoyi-common -Dtest=InMemoryCacheStoreTest,RedisCacheTest test
  • mvn -pl ruoyi-framework -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=RateLimiterAspectTest,TokenServiceLocalCacheTest test
  • mvn -pl ruoyi-admin -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=CacheControllerTest test
  • mvn clean package -DskipTests
  • mvn -pl ruoyi-common,ruoyi-framework,ruoyi-admin -am test

结果:

  • 上述命令全部执行成功

2.2 运行态冒烟

已执行:

  • java -jar ruoyi-admin/target/ruoyi-admin.jar --server.port=18080
  • curl http://127.0.0.1:18080/captchaImage

结果:

  • 应用可正常启动
  • 启动过程未出现 Redis 连接错误
  • captchaImage 返回:{"msg":"操作成功","code":200,"captchaEnabled":false}

说明:

  • 默认端口 8080 被本机其它进程占用,因此改用临时端口 18080 做冒烟
  • 冒烟结束后已手动停止本次启动的 Java 进程

3. 与计划差异

  • 计划中建议使用 mvn -pl ruoyi-admin -am spring-boot:run 启动应用,但本地 Maven 环境未解析到 spring-boot 插件前缀,因此改为直接运行已构建完成的 ruoyi-admin.jar
  • 除上述启动方式调整外,其余后端实施路径与计划一致

4. 当前结论

  • 后端已完成 Redis 依赖移除
  • Redis 相关能力已切换为单实例 JVM 内存实现
  • 构建、单元测试、运行态公开接口冒烟均已完成