132 lines
4.1 KiB
Markdown
132 lines
4.1 KiB
Markdown
|
|
# 移除 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 内存实现
|
||
|
|
- 构建、单元测试、运行态公开接口冒烟均已完成
|