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

132 lines
4.1 KiB
Markdown
Raw Normal View History

# 移除 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`
- 补充 `increment``getCacheStats``clear` 能力
### 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-common``ruoyi-framework``ruoyi-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 内存实现
- 构建、单元测试、运行态公开接口冒烟均已完成