移除Redis依赖并改造为内存缓存

This commit is contained in:
wkc
2026-04-15 10:53:27 +08:00
parent 3d4b9a6b29
commit 36f3c32a48
22 changed files with 1864 additions and 609 deletions

View File

@@ -0,0 +1,116 @@
# 前端缓存监控页适配内存缓存实施记录
## 1. 实际改动内容
### 1.1 调整缓存监控首页
修改文件:
- `ruoyi-ui/src/views/monitor/cache/index.vue`
改动内容:
- 页面展示从 Redis 服务器指标改为内存缓存统计
- 增加默认数据结构:
- `cache_type`
- `cache_mode`
- `key_size`
- `hit_count`
- `miss_count`
- `expired_count`
- `write_count`
- 新增格式化与归一化方法:
- `normalizeCacheData`
- `normalizeCommandStats`
- `formatCacheType`
- `formatCacheMode`
- `formatSampleTime`
- `toNumber`
- 基本信息区改为展示:
- 缓存类型
- 运行模式
- 总键数
- 写入次数
- 命中次数
- 未命中次数
- 过期清理次数
- 命中率
- 图表改为展示内存缓存统计分布与条形概览
### 1.2 调整缓存列表页清理全部后的状态
修改文件:
- `ruoyi-ui/src/views/monitor/cache/list.vue`
改动内容:
- 清理全部缓存后主动清空:
- `cacheKeys`
- `cacheForm`
- `nowCacheName`
- 重新加载缓存分类列表,避免页面残留旧数据显示
### 1.3 API 文件
文件:
- `ruoyi-ui/src/api/monitor/cache.js`
结论:
- 接口路径与交互方式保持不变
- 本次未对 API 文件做额外改动
## 2. 验证结果
### 2.1 Node 版本
项目中未提供 `.nvmrc`,因此未能直接执行 `nvm use` 自动切换。
本机 `nvm` 已安装版本:
- `v14.21.3`
- `v25.9.0`
实际使用版本:
- `nvm use 14.21.3`
原因:
- Vue CLI 4 + Vue 2 对较新的 Node 版本存在潜在兼容风险,优先使用更稳妥的 `v14.21.3`
### 2.2 构建命令
已执行:
- `cd ruoyi-ui && source ~/.nvm/nvm.sh && nvm use 14.21.3 && npm run build:prod`
结果:
- 构建成功
- 输出 `DONE Build complete. The dist directory is ready to be deployed.`
### 2.3 构建告警
存在 webpack 资源体积告警:
- `asset size limit`
- `entrypoint size limit`
说明:
- 这些是现有项目静态资源体积告警,不影响本次缓存监控页适配结果
- 本次未对该类历史体积问题做额外处理
## 3. 与计划差异
- 计划中预期通过 `nvm use` 自动切换版本,但项目没有 `.nvmrc`,因此改为显式执行 `nvm use 14.21.3`
- 除此之外,前端实施路径与计划一致
## 4. 当前结论
- 缓存监控首页已适配后端内存缓存统计结构
- 缓存列表页与现有接口保持兼容
- 前端生产构建已通过

View File

@@ -0,0 +1,131 @@
# 移除 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 内存实现
- 构建、单元测试、运行态公开接口冒烟均已完成