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