**高效能、分散式、記憶體內、Key-Value** 快取系統。非關聯式、無持久化、無備份、無認證 (預設)、單執行緒事件驅動 (libevent)。
| 特性 | 說明 |
|---|---|
| 分散式 | Client 端一致性哈希決定 Key 所在節點,Server 端互不通訊、無同步、無單點故障 |
| 記憶體內 | 所有資料在 RAM,微秒級存取,重啟即遺失 |
| 單執行緒 + libevent | 單進程單執行緒處理所有連線,避免鎖競爭,C10k 級並發 (受限於 CPU 核心數) |
| Slab Allocator 記憶體管理 | 預先劃分固定大小 Chunk (Class),消除碎片,但可能造成空間浪費 (因子 1.25 默認) |
| LRU 淘汰 | 每個 Slab Class 獨立 LRU,全域無統一 LRU |
| 協定 | ASCII (文本、除錯易) / Binary (高效、支援 CAS、Pipeline) |
# 概念
Page (1MB) → 切割成 Chunk (固定大小) → 同大小 Chunk 組成 Slab Class
# 例:Factor 1.25, 最小 96B
Class 1: 96B → 10922 chunks/page
Class 2: 120B → 8738 chunks/page
Class 3: 150B → 6990 chunks/page
...
# 新增資料 → 依大小找 Class → 從 free list 取 chunk → 無則申請新 Page 切割
# 問題:100B 資料佔 120B chunk → 20B 浪費 (內部碎片)
# 優化:調整 -f factor (如 1.1)、-n min chunk size、預熱 slab
?>
| ✅ 適用 | ❌ 不適用 |
|---|---|
| 高頻讀、低頻寫的熱點資料 (Session、使用者資訊、設定、計數器) | 需持久化、需交易 (ACID)、需複雜查詢 (JOIN、WHERE) |
| 資料可重建、可容忍遺失 (快取層定位) | 資料為唯一權威來源 (如訂單、帳務) |
| Key-Value 存取模式 | 需掃描、篩選、排序 (需 Redis Sorted Set / ES) |
| 單值 < 1MB (建議 < 100KB) | 大物件 (影片、大圖) → 儲存至 S3/CDN,快取存 URL |
Memcached 以**極致簡單**換取**極致效能**:單執行緒、Slab 記憶體、LRU、Client 端分片。理解其架構限制 (無持久化、無複雜查詢、單執行緒瓶頸),定位為**「可丟失的高速快取層」**,配合合理的 Key 設計、叢集架構、監控告警,即能發揮最大價值。