# 视频点赞排行榜定时任务 ## 功能说明 本功能实现了每天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时发生异常"