116 lines
3.5 KiB
Markdown
116 lines
3.5 KiB
Markdown
# 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天前的数据。
|
||
|