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

94 lines
3.3 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.

# 视频点赞排行榜定时任务
## 功能说明
本功能实现了每天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. 手动触发
如果需要立即执行缓存任务,可以调用以下接口:
```bash
POST /vlog/cacheTopLikedVlogs?limit=100
```
参数说明:
- `limit`: 查询的视频数量默认为100
### 3. 查看缓存结果
可以通过以下接口查看缓存的数据:
```bash
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时发生异常"