简介:在线教育-天热销视频榜单实战-List数据结构设计
- 需求
- 小滴课堂官网需要一个视频学习榜单,每天更新一次
- 需要支持人工运营替换榜单位置
- 企业中流程
- 定时任务计算昨天最多人学习的视频
- 晚上12点到1点更新到榜单上
- 预留一个接口,支持人工运营
- 类似场景
- 京东:热销手机榜单、电脑榜单等
- 百度:搜索热榜
- 疑惑:为啥不是实时计算,真正高并发下项目,都是预先计算好结果,然后直接返回数据,且存储结构最简单
代码实战
查看榜单
@RestController @RequestMapping("api/v1/rank") public class RankController { @Autowired private RedisTemplate redisTemplate; private static final String DAILY_RANK_KEY = "video:rank:daily"; @RequestMapping("daily_rank") public JsonData videoDailyRank(){ List<VideoDO> list = redisTemplate.opsForList().range(DAILY_RANK_KEY,0,-1); return JsonData.buildSuccess(list); } }
保存榜单
@Test public void saveRank(){ String DAILY_RANK_KEY = "video:rank:daily"; VideoDO video1 = new VideoDO(3,"PaaS工业级微服务大课","xdclass.net",1099); VideoDO video2 = new VideoDO(5,"AlibabaCloud全家桶实战","xdclass.net",59); VideoDO video3 = new VideoDO(53,"SpringBoot2.X+Vue3综合实战","xdclass.net",49); VideoDO video4 = new VideoDO(15,"玩转23种设计模式+最近实战","xdclass.net",49); VideoDO video5 = new VideoDO(45,"Nginx网关+LVS+KeepAlive","xdclass.net",89); redisTemplate.opsForList().leftPushAll(DAILY_RANK_KEY,video5,video4,video3,video2,video1); }
人工干预榜单
@Test public void replaceRank(){ String DAILY_RANK_KEY = "video:rank:daily"; VideoDO video = new VideoDO(5432,"小滴课堂面试专题第一季","xdclass.net",323); redisTemplate.opsForList().set(DAILY_RANK_KEY,1,video); }
本文作者为DBC,转载请注明。