移除Redis依赖并改造为内存缓存
This commit is contained in:
116
doc/2026-04-15-前端缓存监控页适配内存缓存实施记录.md
Normal file
116
doc/2026-04-15-前端缓存监控页适配内存缓存实施记录.md
Normal 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. 当前结论
|
||||
|
||||
- 缓存监控首页已适配后端内存缓存统计结构
|
||||
- 缓存列表页与现有接口保持兼容
|
||||
- 前端生产构建已通过
|
||||
131
doc/2026-04-15-移除Redis依赖改造为内存缓存后端实施记录.md
Normal file
131
doc/2026-04-15-移除Redis依赖改造为内存缓存后端实施记录.md
Normal 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 内存实现
|
||||
- 构建、单元测试、运行态公开接口冒烟均已完成
|
||||
Reference in New Issue
Block a user