首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

新浪微博 Redis 服務平台架構解密:從應用視角看百億級調用實踐

     編輯:MySQL 綜合教學

平台規模一覽

  • 日均命令量:2200+ 億次
  • 日均讀操作:5000 億次
  • 日均寫操作:500 億次
  • 總內存規模:18 TB+
  • 服務器規模:500+ 台,分佈 6 個 IDC
  • 實例數量:2000+

這是國內乃至全球最大級的 Redis 生產集群之一。本文從業務應用場景出發,剖析微博如何用 Redis 解決高併發、大數據難題。

核心應用場景深度解析

1. 計數器系統—— 純內存方案的成本反思

計數器架構成本對比

許多團隊擔心「全內存存儲計數成本過高」,但實際測算顛覆認知:

  • 資源利用率視角:傳統「DB + 異步隊列 + Cache」三層架構,各層利用率普遍偏低;純 Redis 方案資源利用率更高,總體成本反而更低。
  • KISS 原則:僅需一套連接池,無需維護數據一致性、異步隊列、雙寫邏輯,開發極度友好。
  • 穿透風險消除:DB 吞吐有限,Cache 宕機易引發雪崩;Redis 直接承載讀寫,鏈路極簡。
  • 初期容量小:計數器初始值小,內存佔用極低,隨業務增長平滑擴容。

2. 反向緩存—— 解決熱點穿透殺手鐧

場景:短鏈接爆發式傳播,數萬用戶點擊跳轉,需即時判斷用戶等級、綁定狀態、偏好標籤以個性化展示。

傳統方案痛點:Memcache + MySQL 架構下,惡意/無效 ID 導致 Cache Miss,大量請求穿透至 MySQL,連接數暴漲、響應超時。

Redis 反向緩存方案:

// Key 設計
String key: "user:profile:{uid}" 
Value: JSON {level: 3, bind_phone: true, gender: 1, tags: ["sport","tech"]}

反向緩存架構圖

  • 用戶請求先查 Redis 獲取核心屬性(毫秒級)
  • 命中後再走 MC+MySQL 獲取全量信息
  • 無效 ID 直接在 Redis 過濾,徹底切斷穿透鏈路

進階優化:引入 BloomFilter 進一步壓縮內存,誤判率可控。

3. Top N 排行榜—— 高頻更新的最佳載體

運營活動頻繁要求「最新、最熱、點擊率最高」榜單。傳統 MC+MySQL 緩存失效率高,維護成本大。Redis Sorted Set(ZSET)天然支持:

  • ZINCRBY 實時更新分數
  • ZREVRANGE 毫秒級取 Top N
  • 內存佔用極小(僅存 ID+Score)

4. 最近訪問記錄—— List 數據結構完美契合

LPUSH recent:visit:{uid} {item_id}
LTRIM recent:visit:{uid} 0 99  // 保留最近 100 條
// 自動過期舊記錄,代碼零侵入

5. 社交關係圖譜 / 消息隊列—— 曾解燃眉之急

  • 關係存儲:參考 Pinterest 百億級關係圖實踐,用 Redis 存儲關注/粉絲關係,支撐高頻社交查詢。
  • 消息隊列:LPUSH/RPOP 實現輕量級隊列,性能優於 RabbitMQ/Kafka 於中小流量場景。

6. Lua 腳本實現原子化微事務

Redis Lua 腳本將多條命令打包為原子操作,典型場景:

-- 私信推送原子邏輯
local function push_msg(sender, receiver, msg_id)
  redis.call('INCR', 'unread:dialog:'..receiver)   -- 1. 會話未讀+1
  redis.call('INCR', 'unread:msg:'..receiver)      -- 2. 私信未讀+1
  redis.call('PUBLISH', 'push:ack:'..sender, msg_id) -- 3. 發送方回執
end

注意:Lua 腳本全量寫入 AOF 並同步至 Slave,會增加磁盤/網卡負載,需評估腳本大小與調用頻率。

7. 替代 Memcache—— 全方位優勢

架構師心法

「Redis 不只是 Cache,更是高性能數據服務層。將計數、排行、會話、關係、隊列等高頻熱數據下沉到 Redis,讓 MySQL 專注於事務型核心業務,是微博應對億級日活的關鍵架構決策。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度RedisMemcache
性能單線程模型,極致優化,不遜色 MC多線程,但鎖競爭限制擴展性
內存效率同等數據佔用更小(無 Slab 碎片)Slab 分配導致 20-30% 內存浪費
功能豐富度數據結構豐富、持久化、主從同步、集群純 K/V、無持久化、無原生 HA