94 lines
3.3 KiB
Markdown
94 lines
3.3 KiB
Markdown
![]() |
# 视频点赞排行榜定时任务
|
|||
|
|
|||
|
## 功能说明
|
|||
|
|
|||
|
本功能实现了每天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时发生异常"
|