wzj-boot/ruoyi-modules/ruoyi-content/README_定时任务.md

94 lines
3.3 KiB
Markdown
Raw Normal View 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. 手动触发
如果需要立即执行缓存任务,可以调用以下接口:
```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时发生异常"