Files
Jarvis_java/Redis清理说明.md
T
2025-10-28 00:33:26 +08:00

116 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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天前的数据。