在针对自己关注自己的问题,由于不知道前端如何实现的关注按钮(小红加号)的展示与隐藏,这里做最坏的打算,自己刷到自己的视频也会展示关注按钮,要考虑到刷到自己不展示关注,则在创建用户时(这里最合理的办法应该是要么不会刷到自己的视频,要么是前端直接拦掉这个按钮),在follow表中添加一份自己关注自己的记录,同时在取消关注时,回自动拦截掉自己取消关注自己的操作。
在针对查询用户信息(特别是大批量查询用户信息时),在api服务给我传进来一个id数组以及本人id,采用union all的方法(因为视频流也会涉及查询视频流对应的用户流,因此用户可能会有重复,因此没有简单的用in查询),保证顺序和重复都保留,通过子查询的方法,查询followcount和followercount,以及isfollowed(userid用户对id),上述两个count存在redis中,没有的话再去数据库中拿,同时对于workcount,获赞数,点赞数,这三个值来源于其他服务的数据库,因此需要其他服务暴露出方法,供我获取,这里也可以考虑存redis(redis没有的话,我再去暴露的方法里获取)。 针对上述的所有的count,由于数据一致性要求不是很高,重心还应该放在性能上做考量。因此所有的reids过期时间设置为1小时。
对于点赞数,获赞数作品数,由于这三个数据不存在数据库中,同时数据库相互隔离,我在user服务中无法通过查表获取数据,且user服务作为核心服务,被其他服务依赖,避免循环依赖,因此user也不能调用其他服务暴露出来的方法,因此我提出以下的技术方案:
在用户发布作品时
userId发布videoID时
redis中更新key(userId_work_count) value(+1)//没有则初始化创建,value赋1——存作品数
redis中创建key(videoId) value(userId)
在用户点赞作品时
userID点赞videoID
先去redis里通过videoID 取 发布者Id
redis中更新key(userID_favorite_count ) value(+1)//没有则初始化创建,value赋1——存点赞数
redis中更新key(发布者Id_total_favorited) value(+1)//没有则初始化创建,value赋1——存获赞数