分布缓存实战-List-数据结构最佳案例实战

DBC 1.6K 0

简介:在线教育-天热销视频榜单实战-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);

	}

发表评论 取消回复
表情 图片 链接 代码

分享