抖音后端2 | 青训营笔记

154 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

继续上一篇的内容,之前提到完成视频的安全性校验以及成功存储后,将视频信息写入redis以及mysql中。对此,我们启用mysql的事务,依此实现redis写入失败,mysql回滚。与此同时,我们考虑到业务上有查看视频点赞数、评论数的需求。最开始我们将点赞数评论数也存入了video表中。后来考虑到,跟favorite以及comment两个表存在数据的冗余,以及像点赞这种高频操作,每次都要写入mysql可能开销会比较大,最终决定将favorite_count以及comment_count存于redis中,跟视频的其他信息存在redis的hash结构中。这样可以用一次内存的写入代替磁盘的写入,以此服务的相应速度。

最终实现就是先写入mysql,后在redis中添加视频信息,并为每一个用户维护一个publish过的video的list(有序数组),只存video_id。每次用户发布视频,我们就往这个有序数组中添加新发布的video_id(需要注意publish key的过期问题,此处不展开)

  • PublishList 这个函数用来展示用户发布过的视频列表。首先需要意识到,业务上来讲返回的视频最好还是最新发布的放在最前面。其次,PublishList这个接口其实并不需要做权限校验。没有登录的用户仍然可以刷视频,可以去查看视频作者的信息。

每次调用这个接口首先会在redis中check用户的publish key是否存在,如果存在的话就取出里面的video_id再去check video key是否存在,如果存在就返回所需要的信息。当上述两个key在redis中不存在(过期)时,我们需要去查mysql,返回查到的数据,并重新写入redis。

(下期:comment内容)