去重展示

展示问题

实现”点赞过这篇文章的用户”功能后,遇到了新问题。

场景:爆款文章

文章《创业者的一天》:
- 点赞数:10,000+
- 点赞用户:10,000 人

问题:
1. 一次性展示 10,000 个用户头像
   - 页面加载慢
   - 内存占用大
   - 用户体验差

2. 重复的用户
   - 用户可能多次点赞/取消点赞
   - 需要去重

3. 如何展示?
   - 展示所有 10,000 个用户?
   - 只展示前 100 个?
   - 分页展示?

需要设计合理的展示策略。

展示策略

策略 1:限制数量

优点:

  • 实现简单
  • 性能好
  • 用户体验可控

缺点:

  • 看不到所有用户
  • 可能不公平

策略 2:分页展示

优点:

  • 可以查看所有用户
  • 公平展示
  • 页面加载快

缺点:

  • 实现稍复杂
  • 需要分页控件

策略 3:分层展示

优点:

  • 优先展示重要用户
  • 用户体验好
  • 社交属性强

缺点:

  • 实现复杂
  • 需要社交关系数据

去重策略

问题:重复点赞

场景:用户多次点赞/取消点赞

时间线:
T0: 用户点赞文章 A
T1: 用户取消点赞文章 A
T2: 用户再次点赞文章 A

问题:
- 点赞记录列表可能重复
- 需要去重

方案 1:使用 Sorted Set 自动去重

方案 2:去重显示

方案 3:前端去重

推荐:使用 Sorted Set 自动去重

性能优化

优化 1:懒加载

优化 2:虚拟滚动

优化 3:头像 CDN 加速

实际效果

性能对比

场景:10,000 个点赞用户

方案 1:一次性加载
- 数据量:10,000 个用户
- 页面大小:约 5 MB
- 加载时间:约 3 秒
- 用户体验:差

方案 2:限制数量(100 个)
- 数据量:100 个用户
- 页面大小:约 50 KB
- 加载时间:约 0.2 秒
- 用户体验:好

方案 3:分页(每页 50 个)
- 数据量:50 个用户/页
- 页面大小:约 25 KB
- 加载时间:约 0.1 秒
- 用户体验:很好

存储优化

优化前:
- 每篇文章存储所有点赞用户
- 10,000 个用户 × 100 字节 = 1 MB/文章
- 10,000 篇热门文章 = 10 GB

优化后:
- 每篇文章只存储最近 100 个用户
- 100 个用户 × 100 字节 = 10 KB/文章
- 10,000 篇文章 = 100 MB

节省:99%

课后练习

练习 1

如何实现”随机展示”点赞用户?

参考答案(3 个标签)
随机算法展示策略Redis

方案:使用 Sorted Set + 随机

练习 2

如何实现”按权重展示”点赞用户?

参考答案(3 个标签)
权重算法排序Redis

方案:综合评分排序

练习 3

如何实现”折叠”重复用户?

参考答案(3 个标签)
UI设计折叠用户体验

方案:折叠相同用户的多次点赞

练习 4

如何实现”搜索”点赞用户?

参考答案(3 个标签)
搜索过滤Redis

方案:客户端过滤

优化:使用 Redis Search

练习 5

如何实现”关注”功能(一键关注所有点赞用户)?

参考答案(3 个标签)
社交功能批量操作关注

方案:批量关注

思考题

  1. 如何实现”点赞用户的活跃度排序”(经常互动的用户优先展示)?

  2. 如何处理”僵尸用户”(长期不活跃的用户)?

  3. 如何实现”批量取消关注”功能?

💡 提示:这些问题没有标准答案,建议结合实际情况深入思考。