# Redis键清理功能说明 ## 功能概述 本功能用于清理Redis中超过93天(3个月)的旧数据,支持两种类型的键: 1. **tag键**:格式为 `tag:hash值:YYYY-MM-DD HH`,例如 `tag:01381d95e4936f1f3fe643bba2171894:2025-01-12 00` 2. **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` **请求示例:** ```bash curl -X POST http://192.168.8.88:6666/jd/cleanRedisData \ -H "Content-Type: application/json" \ -d '{ "skey": "2192057370ef8140c201079969c956a3" }' ``` **响应示例:** ```json { "success": true, "message": "Redis清理任务已执行完成,详情请查看日志" } ``` ### 方式二:使用Postman等工具 1. 创建新的POST请求 2. URL: `http://192.168.8.88:6666/jd/cleanRedisData`(注意是6666端口) 3. Headers: `Content-Type: application/json` 4. Body 标签选择 **raw** 格式,类型选择 **JSON** 5. Body 内容: ```json { "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 个过期键 ``` ## 注意事项 1. **skey验证**:调用接口需要提供正确的skey(密钥) 2. **执行时间**:建议在业务低峰期手动执行清理,避免影响性能 3. **备份建议**:首次执行前建议备份Redis数据 4. **监控日志**:执行后及时查看日志,确认清理结果 ## 代码位置 - **清理逻辑**:`d:\code\jd\src\main\java\cn\van\business\util\JDScheduleJob.java` - `cleanOldTagRedisData()` - 清理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命令: ```bash 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天前的数据。