3.5 KiB
3.5 KiB
Redis键清理功能说明
功能概述
本功能用于清理Redis中超过93天(3个月)的旧数据,支持两种类型的键:
- tag键:格式为
tag:hash值:YYYY-MM-DD HH,例如tag:01381d95e4936f1f3fe643bba2171894:2025-01-12 00 - jd:refresh:tag键:格式为
jd:refresh:tag:hash值:YYYY-MM-DD HH:mm:ss或jd:refresh:tag:YYYY-MM-DD HH:mm:ss
使用方式
方式一:手动调用API接口(推荐)
⚠️ 注意端口号:
- jd项目端口:6666(直接访问,无需认证)
- RuoYi框架端口:30313(需要认证,不推荐)
发送POST请求到:http://your-server:6666/jd/cleanRedisData
请求示例:
curl -X POST http://192.168.8.88:6666/jd/cleanRedisData \
-H "Content-Type: application/json" \
-d '{
"skey": "2192057370ef8140c201079969c956a3"
}'
响应示例:
{
"success": true,
"message": "Redis清理任务已执行完成,详情请查看日志"
}
方式二:使用Postman等工具
- 创建新的POST请求
- URL:
http://192.168.8.88:6666/jd/cleanRedisData(注意是6666端口) - Headers:
Content-Type: application/json - Body 标签选择 raw 格式,类型选择 JSON
- Body 内容:
{
"skey": "2192057370ef8140c201079969c956a3"
}
⚠️ 常见错误:
- ❌ 不要把skey放在Query参数中
- ❌ 不要使用30313端口(会遇到401认证错误)
- ✅ 确保在Body标签中使用JSON格式
方式三:自动定时执行
系统已配置定时任务,每天凌晨3点自动执行清理:
- tag键清理:每天凌晨3点执行(cron:
0 0 3 * * ?) - jd:refresh:tag键清理:每月1日11:45执行(cron:
0 45 11 * * ?)
清理规则
- 截止日期:当前时间减去93天
- 清理对象:所有早于截止日期的键
- 安全性:只删除符合特定格式且过期的键
例如:
- 当前时间:2025-10-27
- 截止日期:2025-07-26
- 将删除:2025-07-26之前的所有符合格式的键
- 保留:2025-07-26及之后的键
日志查看
清理任务执行时会输出详细日志,可通过以下日志查看执行情况:
开始清理93天前的tag键数据,截止时间:YYYY-MM-DD HH:mm:ss
找到 X 个tag相关的键
已删除 100 个过期的tag键
已删除 200 个过期的tag键
...
tag键清理完成,共删除 X 个过期键
注意事项
- skey验证:调用接口需要提供正确的skey(密钥)
- 执行时间:建议在业务低峰期手动执行清理,避免影响性能
- 备份建议:首次执行前建议备份Redis数据
- 监控日志:执行后及时查看日志,确认清理结果
代码位置
-
清理逻辑:
d:\code\jd\src\main\java\cn\van\business\util\JDScheduleJob.javacleanOldTagRedisData()- 清理tag键cleanOldRedisHashData()- 清理jd:refresh:tag键manualCleanOldRedisData()- 手动触发清理
-
API接口:
d:\code\jd\src\main\java\cn\van\business\controller\jd\JDInnerController.java/jd/cleanRedisData- POST接口
常见问题
Q: 如何查看当前Redis中有多少符合条件的键? A: 可以使用Redis命令:
redis-cli KEYS "tag:*" | wc -l
redis-cli KEYS "jd:refresh:tag:*" | wc -l
Q: 清理后可以恢复吗? A: 不可以,删除操作是不可逆的,请谨慎操作。
Q: 如果需要调整清理天数怎么办?
A: 修改 JDScheduleJob.java 中的 minusDays(93) 参数,例如改为 minusDays(60) 清理60天前的数据。