# 视频点赞排行榜定时任务

## 功能说明

本功能实现了每天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时发生异常" 