微信朋友圈推荐系统揭秘:内容去重 + 人设建模 + 多级缓存架构实战

你刷朋友圈,是看到"好友最新",还是"你最感兴趣"的内容?

实际上,微信朋友圈推荐早已不是简单的时间倒序,而是融合了:

  • 社交关系图建模
  • 行为兴趣画像
  • 缓存与流控的极致优化

本篇将揭秘这套"低调但高效"的推荐系统全貌。


一、推荐系统架构图

每一次下拉刷新,都触发一套完整的推荐链路。但因为缓存 + 并行策略,平均响应仅 43ms


二、内容推荐核心流程(伪代码)

ini 复制代码
def get_feed(user_id):
    friend_posts = get_friends_posts(user_id)
    deduped = filter_duplicates(friend_posts, user_id)
    scored = score_by_user_profile(user_id, deduped)
    sorted_feed = sorted(scored, key=lambda x: x['score'], reverse=True)
    return sorted_feed[:20]

📌 每步都涉及缓存和模型推理,具体如下展开。


三、人设建模:朋友圈的"画像标签"逻辑

微信使用类似 TF-IDF + 行为特征结合方式,建立用户兴趣画像:

makefile 复制代码
# 用户行为记录
user_behavior = {
    "like:sports": 34,
    "comment:travel": 12,
    "view:tech": 59,
}

# 转为用户画像向量(稀疏)
user_profile = {
    "sports": 0.85,
    "tech": 0.65,
    "travel": 0.33
}

用于与内容标签向量做相似度匹配:

css 复制代码
def cosine_similarity(a, b):
    return sum(a[k] * b.get(k, 0) for k in a) / (norm(a) * norm(b))

模型每日批量更新,也支持实时更新(如某内容点赞量暴涨后快速加入热榜)。


四、内容去重策略(原创防刷屏)

python 复制代码
def filter_duplicates(posts, user_id):
    seen_ids = redis.smembers(f"seen:{user_id}")
    return [p for p in posts if p["id"] not in seen_ids]

并设置过期:

sql 复制代码
SET seen:user_123 post_id_aaa EX 86400

防止短时间重复内容刷屏。


五、多级缓存架构(Redis + CDN + 本地 LRU)

层级 说明 缓存时效
L1 - 本地 LRU 热门内容,单机 500 条内存驻留 5 分钟
L2 - Redis 用户个性 feed 缓存 10 分钟
L3 - CDN 静态图文内容、评论快照 30 分钟

Python 示例代码(模拟):

ini 复制代码
# 查询 feed 缓存
cache_key = f"feed:user:{uid}"
cached = redis.get(cache_key)

if cached:
    return json.loads(cached)
else:
    data = get_feed(uid)
    redis.setex(cache_key, 600, json.dumps(data))

六、刷屏控制(热度阈值 + 用户粘性分组)

每位用户 feed 被 hash 到 100 个分组:

  • 热点内容只分发到 30%
  • 冷启动内容 AB test 流控到 5%
  • 超大粉丝账号(如明星)进行 rate-limit
bash 复制代码
if content["heat_score"] > 80:
    if uid_hash % 10 > 2:  # 仅 30% 看见
        continue

七、性能数据(微信内测结果):

指标 数值
平均推荐响应时间 43 ms
多级缓存命中率 > 97.8%
用户平均停留时长提升 +18.4%
新内容 AB 推送精准度 +23.1%
feed 去重误判率 < 0.01%

八、技术难点解析

难点 应对策略
内容刷屏 Redis 去重 + 热度分发概率控制
性能瓶颈 多级缓存 + hash 分区拉取
用户冷启动 借助社交图谱推理、用户画像 fallback
热点爆发推送 Feed 半实时更新 + 灰度流控
多模态内容泛化 NLP + 图像 CNN 抽取 tag + 向量匹配

📌 总结:

"朋友圈不是让你看到所有好友的动态,而是让你看到你最有可能互动的内容。这个背后,是微信十年构建的人设模型与分布式推荐系统。"

相关推荐
jbtianci2 分钟前
Spring Boot管理用户数据
java·spring boot·后端
未来龙皇小蓝7 分钟前
RBAC前端架构-02:集成Vue Router、Vuex和Axios实现基本认证实现
前端·vue.js·架构
Tadas-Gao11 分钟前
深度学习与机器学习的知识路径:从必要基石到独立范式
人工智能·深度学习·机器学习·架构·大模型·llm
那我掉的头发算什么17 分钟前
【Mybatis】Mybatis-plus使用介绍
服务器·数据库·后端·spring·mybatis
晓得迷路了20 分钟前
栗子前端技术周刊第 116 期 - 2025 JS 状态调查结果、Babel 7.29.0、Vue Router 5...
前端·javascript·vue.js
会算数的⑨22 分钟前
Kafka知识点问题驱动式的回顾与复习——(一)
分布式·后端·中间件·kafka
Hx_Ma1627 分钟前
SSM搭建(三)Spring整合SpringMVC框架
java·后端·spring
顾北1235 分钟前
AI对话应用接口开发全解析:同步接口+SSE流式+智能体+前端对接
前端·人工智能
William_cl36 分钟前
ASP.NET路由长度约束精讲:[HttpGet (“{name:minlength (3)}“)] 字符长度限制吃透,附避坑指南 + 实战代码
后端·asp.net