这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记
本文接上一篇继续讲评论相关的接口。
用户删除评论(DeleteComment)
评论删除的操作也是使用mysql的事务,先尝试从comment表中删除评论,然后再修改redis,如果任何地方出现error则回滚。对于评论的删除,我们需要去check用户是否有此权限删除。我们的做法是判断当前评论表中是否存在一行,comment_id,video_id,user_id均与客户端传入的相同,如果存在则说明当前操作是合法的。后续的操作与添加评论类似,如果key存在(视频的评论列表与视频)于缓存中,就从评论列表中删除当前comment_id,并对视频的comment_count减一。对于上述两个操作,我们使用redis中的pipeline去保证原子性,确保两条语句是顺序执行的。而对于comment则不需要考虑缓存中是否存在,因为存在也会被删掉,所以直接删除即可。
评论列表(CommentList)
不同于上述评论操作,评论列表作为与feed功能相似的读操作,无需登陆,也就无需做权限校验。在此接口中,我们会优先查询缓存中对应的key是否存在,如果存在则直接返回,不存在去查sql并将过期的key重新写入缓存中。这里面的key跟上面一样,仍然是两个(当前的视频的评论id列表,与评论id详细信息)。
上述大概就是我这此项目中负责的大部分功能了,一些技术细节并没有完全展开。更详细的技术细节会写在我们提交的项目文档中,包括我们全部的思考过程。在此也非常感谢字节跳动青训营能提供这样一个评论,让我能更深入的了解后端技术在业界的具体使用和一些注意事项。