3.3 KiB
3.3 KiB
视频点赞排行榜定时任务
功能说明
本功能实现了每天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. 手动触发
如果需要立即执行缓存任务,可以调用以下接口:
POST /vlog/cacheTopLikedVlogs?limit=100
参数说明:
limit
: 查询的视频数量,默认为100
3. 查看缓存结果
可以通过以下接口查看缓存的数据:
GET /vlog/getTopLikedVlogs
GET /vlog/getTopLikedVlogs?date=2024-01-15
GET /vlog/getTopLikedVlogs?pageSize=10&pageNum=0
参数说明:
date
: 指定日期,格式为 yyyy-MM-dd,如果不传则使用当天日期pageSize
: 每页返回的视频数量,默认为10pageNum
: 页码,从0开始,默认为0
获取逻辑:
- 首先从Redis缓存中获取指定页的视频数据
- 如果Redis中的数据不足,会从数据库随机查询补充
- 确保每次返回指定数量的视频
Redis存储格式
缓存数据以JSON格式存储在Redis中,key格式为:
top_liked_vlogs:yyyy-MM-dd
例如:top_liked_vlogs:2024-01-15
数据包含视频的完整信息,包括:
- 视频ID、标题、URL、封面
- 点赞数、评论数(包含Redis中的实际点赞数:
redis_like_count
) - 上传者ID、创建时间等
注意事项
- 确保Redis服务正常运行
- 确保数据库连接正常
- 定时任务依赖于Spring Boot的调度功能,需要确保应用正常运行
- 缓存数据有效期为24小时,过期后需要重新执行任务
- 缓存时会先打乱视频顺序,确保数据的随机性
- 获取视频时会优先从Redis获取,不足时从数据库随机查询补充
日志监控
定时任务的执行情况会记录在应用日志中,可以通过以下关键字搜索:
- "开始执行定时任务:查询点赞最多的100条视频并存储到Redis"
- "定时任务执行完成:成功缓存点赞最多的100条视频到Redis"
- "定时任务执行失败:缓存点赞最多视频到Redis时发生异常"