关注推送
2026年3月1日大约 2 分钟
关注推送
关注推送即Feed流,用户关注了某个用户或者某个话题,那么当这个用户或者话题有新的动态时,就会推送给用户。
- 关注推送的实现方式有两种:拉模式和推模式。
- 拉模式:也叫读扩散,用户每次访问时,系统会查询用户关注的所有用户或者话题的最新动态,然后将这些动态按照时间顺序排序后返回给用户。

图:拉模式的流程案例
- 推模式:也叫写扩散,当用户发布新的动态时,系统会将这个动态推送给所有关注了这个用户或者话题的用户,这样用户在访问时就不需要查询了,直接从自己的Feed流中获取最新的动态即可。

图:拉模式的流程案例
推拉结合模式:根据发布者和接收者的不同特点,选择不同的模式进行推送。
- 例如,对于一些大V用户或者热门话题,普通粉丝可以采用拉模式,活跃粉丝采用推模式。
- 而对于一些普通用户或者冷门话题,可以采用推模式进行推送。
关注推送的实现方式之间的区别
| 拉模式 | 推模式 | 推拉结合模式 | |
|---|---|---|---|
| 写比例 | 低 | 高 | 中 |
| 读比例 | 高 | 低 | 中 |
| 用户读取延迟 | 高 | 低 | 低 |
| 实现难度 | 简单 | 复杂 | 特别复杂 |
| 使用场景 | 很少使用 | 用户较少 | 用户较多 |
推模式实现关注推送功能
Redis中的SortedSet类型非常适合用来实现Feed流,因为它具有有序和不重复的特点,可以根据时间戳作为分数进行排序。
- 业务流程:
- 用户A关注用户B时,将用户A的ID添加到用户B的粉丝列表中。
- 用户B发布新的动态时,系统会将这个动态推送给所有关注了用户B的用户,即将这个动态添加到这些用户的Feed流中。
- 用户A访问自己的Feed流时,直接从自己的Feed流中获取最新的动态即可。
滚动查询Feed流
- 使用SortedSet的
ZREVRANGEBYSCORE命令来实现滚动查询Feed流。 - 滚动分页查询参数:
- max:第一次查询可以给当前时间戳,后续查询可以给上一次查询结果中最小时间戳。
- min:0,表示查询所有时间戳大于0的动态。
- offset:第一次查询为0,后续查询为上一次查询结果中最小时间戳的总个数。
- count:每次查询的数量,例如10条。