限流实现与规则表

点赞限流

点赞通知有两个问题:数量多、内容单一。

我设计了聚合 + 时间窗口限流:

  • 同一动态的点赞,聚合成「张三等 15 人点赞」。
  • 同一动态每小时最多 1 条点赞通知。
  • 实现:Redis 记录「用户 + 动态」的最近通知时间,窗口内合并。

评论限流

评论比点赞复杂:不同用户评论内容不同,同一用户连续评论可以聚合。

我设计了两层限流:

  • 按动态:同一动态每小时最多 5 条评论通知。
  • 按用户:同一用户 5 分钟内的连续评论聚合成 1 条。

推送限流

站内信限流了,但推送呢?推送更需要限流,因为:

  • 推送会打断用户。
  • 推送显示在通知中心,数量有限。
  • 推送过多会被用户关闭通知权限。

推送限流规则比站内信更严格:同一动态每小时最多推送 1 次。

限流规则表

按类型设置不同的站内信 / 推送限流与聚合
通知类型站内信限流推送限流聚合规则
点赞同一动态每小时最多 1 条同一动态每小时推送 1 次聚合成「张三等 15 人点赞」
评论同一动态每小时最多 5 条同一动态每小时推送 3 次同一用户 5 分钟评论聚合
关注不限流每小时最多推送 5 次不聚合
私信不限流不限流不聚合
系统通知每天最多 3 条每天推送 1 次不聚合
要点: 点赞限流严格(高频低价值)、私信不限流(重要);推送比站内信更需要限流,因为推送会打断用户、过多会被关闭权限。

用户自定义限流

小李提出:「能不能让用户自己设置接收频率?」

我设计了用户偏好设置:用户可调整通知频率(高 / 中 / 低),发送时检查。存储在 notification_preferences 表,发送通知时检查用户偏好。

一句话

限流实现 = 聚合 + 时间窗口 + 按类型差异化;推送限流比站内信更严格。核心规则表:点赞严格、私信不限、推送克制。

发现内容有问题?

告诉我们哪里需要改进。