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

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