QDAirPortBackend0122/doc/work/REDIS_OPTIMIZATION.md
2026-01-22 13:19:47 +08:00

137 lines
3.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Redis 内存优化 - 快速参考
## 🚀 快速开始
### 1⃣ 诊断当前状态
```bash
./scripts/redis_memory_diagnosis.sh
```
### 2⃣ 配置 Redis 内存限制
```bash
./scripts/configure_redis_memory.sh
# 开发环境选 1 (256MB)
# 生产环境选 2 (1GB)
```
### 3⃣ 重新编译部署
```bash
mvn clean install -DskipTests
./ry.sh restart
```
## 📊 已实施的优化
| 优化项 | 修改前 | 修改后 | 效果 |
|--------|--------|--------|------|
| Redis 默认缓存过期 | 永不过期 | 1小时 | 防止内存泄漏 |
| WebSocket 消息缓存 | 100条/30分钟 | 50条/10分钟 | 减少50%占用 |
| 内存缓存清理 | 无 | 每分钟 | 自动清理不活跃数据 |
| Redis 内存限制 | 无限制 | 256MB/1GB | 防止OOM |
| 缓存监控 | 无 | 每5分钟 | 及时发现问题 |
## 🔍 常用命令
### 查看 Redis 内存使用
```bash
redis-cli INFO memory | grep used_memory_human
```
### 查看 Key 数量
```bash
redis-cli DBSIZE
```
### 查看最大的 Key
```bash
redis-cli --bigkeys
```
### 查看配置
```bash
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy
```
### 手动设置内存限制
```bash
# 设置为 512MB
redis-cli CONFIG SET maxmemory 512mb
redis-cli CONFIG SET maxmemory-policy volatile-lru
```
### 清理所有缓存 (⚠️ 谨慎使用)
```bash
redis-cli FLUSHDB
```
## 📁 修改的文件
### 核心修改
- ✅ [RedisCache.java](qaup-common/src/main/java/com/qaup/common/core/redis/RedisCache.java) - 添加默认过期时间
- ✅ [MessageCacheService.java](qaup-collision/src/main/java/com/qaup/collision/websocket/cache/MessageCacheService.java) - 优化缓存参数
- ✅ [DataCollectorService.java](qaup-collision/src/main/java/com/qaup/collision/datacollector/service/DataCollectorService.java) - 添加清理逻辑
- ✅ [application-dev.yml](qaup-admin/src/main/resources/application-dev.yml) - Redis 配置
- ✅ [application-prod.yml](qaup-admin/src/main/resources/application-prod.yml) - Redis 配置
### 新增文件
- 🆕 [RedisCacheCleanupTask.java](qaup-framework/src/main/java/com/qaup/framework/task/RedisCacheCleanupTask.java) - 自动清理任务
- 🆕 [scripts/configure_redis_memory.sh](scripts/configure_redis_memory.sh) - 配置脚本
- 🆕 [scripts/redis_memory_diagnosis.sh](scripts/redis_memory_diagnosis.sh) - 诊断脚本
## 📈 监控指标
### 应用日志 (每分钟)
```
清理不活跃缓存对象: X 个移动对象, Y 个航班通知
```
### Redis 监控 (每5分钟)
```
Redis 内存使用情况 - 当前: XXM, 峰值: XXM, 限制: 256M
```
### 告警阈值
- 🟢 正常: < 70%
- 🟡 警告: 70-80%
- 🟠 注意: 80-90%
- 🔴 严重: > 90%
## 🎯 预期效果
- ✅ 内存占用降低 50-70%
- ✅ 内存使用稳定
- ✅ 自动清理过期数据
- ✅ 防止内存泄漏
- ✅ 性能无明显影响
## 🔄 回滚方案
如果出现问题:
```bash
# 1. 恢复 Git
git checkout qaup-common/src/main/java/com/qaup/common/core/redis/RedisCache.java
# 2. 移除内存限制
redis-cli CONFIG SET maxmemory 0
# 3. 重新部署
mvn clean install -DskipTests && ./ry.sh restart
```
## 📚 详细文档
- 📖 [完整优化指南](doc/redis_optimization_guide.md)
- 📋 [实施总结](doc/redis_optimization_summary.md)
## ⚠️ 注意事项
1. **生产环境务必先备份**
2. **建议先在测试环境验证**
3. **监控应用性能和日志**
4. **Redis 配置实时生效,应用需重启**
---
**最后更新**: 2025-10-13 | **版本**: 1.0.0