目录
一、实现博客点赞功能
二、实现博客点赞用户列表功能
三、好友关注和取关以及求共同关注
四、实现关注推送
1、拉模式
2、推模式
3、推拉结合
四、三种模式对比
这里简单记录一下,没有实现方法,只是帮助记忆
一、实现博客点赞功能
可以通过set的结构将博客的业务名字+博客id作为键,点赞用户id作为值存储到redis中,查询的时候首先到redis中去判断这个博客是否被点过赞,然后封装一个有是否点赞字段的返回对象。
当发起点赞请求之后先到redis中判断这个博客的set信息中是否有当前用户,如果没有,则数据库点赞信息加一,并且添加,如果有,则把mysql点赞数减一,redis的删掉 。
当然这里用户的点赞信息也可以存到mysql库中持久存储,可以通过mq实现,点赞之后先存到redsi中,然后发送给mq去慢慢存到mysql中
二、实现博客点赞用户列表功能
首先我们可能会想到List,按照点赞的顺序去存入list当中,然后从同一侧取出,这样可以实现排序,set不支持排序,这里不考虑,zset可以根据score排序,我们可以把score设置成时间,根据点赞前后排序,值设置成用户的id,键设置成业务名字+博客id
三、好友关注和取关以及求共同关注
关注和取消关注首先先去数据库当中查询当前用户是否关注这个用户,数据库字段(id、用户id、关注的id,创建时间),如果没关注则点击关注,反之,然后再添加一个根据用户id查询关注列表的接口,每次关注一个人都保存到redis的set中key存为业务+当前用户id,值存为被关注用户的id,求共同关注的时候通过intersect求交集的id并查询用户信息。
四、实现关注推送
通过Feed流实现推送模式
采用timeline模式实现方案有三种:
- 拉模式
- 推模式
- 推拉结合
1、拉模式
也叫读扩散。
张三李四王五发布了相关信息到发件箱里,并携带时间戳,赵六查看时从各个发件箱中拉取信息并进行排序,缺点是耗时较长有延时
2、推模式
也叫写扩散
当张三李四发布消息的时候会直接推送到关注他的粉丝收件箱中并进行排序,延迟较低,但是缺点是内存占用比较低
3、推拉结合
也叫做读写混合,兼具推和拉两种模式的优点
对于粉丝有普通粉丝和活跃粉丝两种,对于活跃粉丝采用推模式,对于普通粉丝采用拉模式
活跃粉丝上线不需要主动拉取,效率较快,对于普通粉丝上线次数不多,主动拉取影响也不大