4.1 KiB
4.1 KiB
移除 Redis 依赖改造为内存缓存后端实施记录
1. 实际改动内容
1.1 新增内存缓存底座
新增文件:
ruoyi-common/src/main/java/com/ruoyi/common/core/cache/InMemoryCacheEntry.javaruoyi-common/src/main/java/com/ruoyi/common/core/cache/InMemoryCacheStats.javaruoyi-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 - 补充
increment、getCacheStats、clear能力
1.3 改造限流与缓存监控
修改文件:
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.javaruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
改造内容:
RateLimiterAspect删除 Lua + Redis 依赖,改为内存计数CacheController改为返回内存缓存统计与缓存内容- 缓存清理接口改为操作本地缓存门面
1.4 删除 Redis 配置与依赖
修改文件:
ruoyi-common/pom.xmlruoyi-framework/pom.xmlruoyi-admin/pom.xmlruoyi-admin/src/main/resources/application.yml
删除文件:
ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.javaruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java
处理结果:
- 删除
spring-boot-starter-data-redis - 删除
commons-pool2 - 删除
spring.redis配置块 - 删除 Redis 专属配置类
- 为
ruoyi-common、ruoyi-framework、ruoyi-admin增加spring-boot-starter-test测试依赖
1.5 新增后端测试
新增文件:
ruoyi-common/src/test/java/com/ruoyi/common/core/cache/InMemoryCacheStoreTest.javaruoyi-common/src/test/java/com/ruoyi/common/core/redis/RedisCacheTest.javaruoyi-framework/src/test/java/com/ruoyi/framework/aspectj/RateLimiterAspectTest.javaruoyi-framework/src/test/java/com/ruoyi/framework/web/service/TokenServiceLocalCacheTest.javaruoyi-admin/src/test/java/com/ruoyi/web/controller/monitor/CacheControllerTest.java
覆盖内容:
- 内存缓存读写 / TTL / keys / 统计
- 缓存门面能力
- 限流计数
- token 登录态缓存
- 验证码删除
- 防重提交毫秒级窗口
- 缓存监控接口
2. 执行结果
2.1 验证命令
已执行:
mvn -pl ruoyi-common -Dtest=InMemoryCacheStoreTest,RedisCacheTest testmvn -pl ruoyi-framework -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=RateLimiterAspectTest,TokenServiceLocalCacheTest testmvn -pl ruoyi-admin -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=CacheControllerTest testmvn clean package -DskipTestsmvn -pl ruoyi-common,ruoyi-framework,ruoyi-admin -am test
结果:
- 上述命令全部执行成功
2.2 运行态冒烟
已执行:
java -jar ruoyi-admin/target/ruoyi-admin.jar --server.port=18080curl 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 内存实现
- 构建、单元测试、运行态公开接口冒烟均已完成