137 lines
3.4 KiB
Markdown
137 lines
3.4 KiB
Markdown
# 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
|