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

3.5 KiB
Raw Blame History

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

请求示例:

curl -X POST http://192.168.8.88:6666/jd/cleanRedisData \
  -H "Content-Type: application/json" \
  -d '{
    "skey": "2192057370ef8140c201079969c956a3"
  }'

响应示例:

{
  "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 内容:
{
  "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命令:

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天前的数据。