wzj-boot/ruoyi-modules/ruoyi-content/README_定时任务.md
2025-08-04 14:42:21 +08:00

3.3 KiB
Raw Blame History

视频点赞排行榜定时任务

功能说明

本功能实现了每天12点自动查询点赞最多的100条视频并存储到Redis中的定时任务。缓存时会先打乱顺序然后按点赞数排序存储。

实现内容

1. 数据库查询

  • VlogMapper 中添加了 selectAllPublicVlogs 方法
  • VlogMapper 中添加了 selectRandomVlogs 方法(随机查询视频)
  • 查询条件状态为1审核通过且非私密视频
  • 获取所有公开视频的基本信息

2. 服务层实现

  • VlogService 接口中添加了 cacheTopLikedVlogs 方法
  • VlogService 接口中添加了 getRandomVlogs 方法
  • VlogServiceImpl 中实现了缓存逻辑
  • 从Redis中获取每个视频的点赞数量key格式redis_vlog_be_liked_counts:{vlogId}
  • 缓存逻辑优化先打乱视频顺序然后按Redis中的点赞数排序获取前100个最受欢迎的视频
  • 将查询结果以JSON格式存储到Redis过期时间为24小时

3. 定时任务

  • 创建了 VlogScheduledTask 定时任务类
  • 使用 @Scheduled(cron = "0 0 12 * * ?") 配置每天12点执行
  • 在主应用类 DromaraApplication 上添加了 @EnableScheduling 注解

4. 控制器接口

  • 添加了手动触发缓存的接口:POST /vlog/cacheTopLikedVlogs
  • 添加了获取缓存数据的接口:GET /vlog/getTopLikedVlogs

使用方法

1. 自动执行

定时任务会在每天12点自动执行无需手动干预。

2. 手动触发

如果需要立即执行缓存任务,可以调用以下接口:

POST /vlog/cacheTopLikedVlogs?limit=100

参数说明:

  • limit: 查询的视频数量默认为100

3. 查看缓存结果

可以通过以下接口查看缓存的数据:

GET /vlog/getTopLikedVlogs
GET /vlog/getTopLikedVlogs?date=2024-01-15
GET /vlog/getTopLikedVlogs?pageSize=10&pageNum=0

参数说明:

  • date: 指定日期,格式为 yyyy-MM-dd如果不传则使用当天日期
  • pageSize: 每页返回的视频数量默认为10
  • pageNum: 页码从0开始默认为0

获取逻辑

  1. 首先从Redis缓存中获取指定页的视频数据
  2. 如果Redis中的数据不足会从数据库随机查询补充
  3. 确保每次返回指定数量的视频

Redis存储格式

缓存数据以JSON格式存储在Redis中key格式为

top_liked_vlogs:yyyy-MM-dd

例如:top_liked_vlogs:2024-01-15

数据包含视频的完整信息,包括:

  • 视频ID、标题、URL、封面
  • 点赞数、评论数包含Redis中的实际点赞数redis_like_count
  • 上传者ID、创建时间等

注意事项

  1. 确保Redis服务正常运行
  2. 确保数据库连接正常
  3. 定时任务依赖于Spring Boot的调度功能需要确保应用正常运行
  4. 缓存数据有效期为24小时过期后需要重新执行任务
  5. 缓存时会先打乱视频顺序,确保数据的随机性
  6. 获取视频时会优先从Redis获取不足时从数据库随机查询补充

日志监控

定时任务的执行情况会记录在应用日志中,可以通过以下关键字搜索:

  • "开始执行定时任务查询点赞最多的100条视频并存储到Redis"
  • "定时任务执行完成成功缓存点赞最多的100条视频到Redis"
  • "定时任务执行失败缓存点赞最多视频到Redis时发生异常"