本文旨在從多角度綜合介紹 memcached,內容涵蓋:簡介、應用場景、安裝、使用、部署架構、局限性、改進方向。無論您是否聽聞或使用過 memcached,期望本文能對您的工作有所啟發。
memcached 是一個高性能、分布式的記憶體對象緩存系統,廣泛應用於大負載高併發網站,是極為成熟的產品/技術。Facebook、YouTube、Yahoo、新浪、搜狐、網易、豆瓣等均在使用。它在以用戶為中心的網站(SNS、Blog 等 Web 2.0 應用)表現尤為突出,這類站點極度重視用戶體驗,要求極高響應速度,用戶數據關聯複雜,頻繁更新檢索資料庫。
memcache 最初由 danga.com 為 livejournal.com 開發(日 PV 達千萬級),旨在解決負載與響應速度難題。它能應對任意連接數,採用非阻塞網絡 IO,使用極簡單,核心功能不超過 5 個方法。官網:https://www.danga.com/memcached。
任何 DBMS(MySQL、Oracle、MSSQL、DB2、Postgres 等)再怎麼優化,終究繞不開與慢速存儲介質(硬盤、磁帶)的 IO 交換,一旦涉及 IO 性能急劇下降。memcached 全程在記憶體操作,存取效率極高。大型網站常用讀寫分離(主從庫)、橫向/縱向分庫分表優化資料庫,但單表超 2000 萬記錄性能仍會崩潰。資料庫在事務操作(加鎖)、數據更新(加鎖)時出現訪問瓶頸,而 memcached 基本無此類情況,官方評價 "very fast",實驗室測試對比結果網上比比皆是。
分布式系統專業定義:多處理器經互連網絡構成統一系統,分散任務協調共享資源。memcache 分布式特性體現兩方面:
部署邏輯示意圖:

Memcached 以守護進程運行於一或多台伺服器,接受客戶端連接操作,客戶端語言涵蓋 Perl/PHP/Python/Ruby/Java/C#/C 等。對象以唯一 key 存取,可設有效期。進程啟動預申請大塊記憶體自行管理,而非每次向 OS 申請。對象存放於巨大 Hash 表,採用 NewHash 算法管理,記憶體足夠時耗時僅為網絡 Socket 連接。調度採 LRU(Least Recently Used)算法,32 位系統尋址上限 4G,64 位系統大幅擴展尋址能力,現多運行於 64 位系統。
本文出自「網站架構之家」博客,轉載請保留出處:https://wangzebin.blog.51cto.com/653300/128235