memcached 不會主動釋放已分配內存。記錄過期後對客戶端不可見,其佔用空間標記為可復用,等待新數據覆蓋。
內部不啟動專門線程掃描過期記錄,而是在 get 操作時檢查時間戳判斷是否過期。這避免了 CPU 在過期監控上的額外開銷。
當空間不足時,memcached 採用 Least Recently Used (LRU) 策略:優先淘汰最近最少使用的記錄。此模型符合緩存實用邏輯。若需禁用 LRU,可啟動時加 -M 參數(需配合 -m 指定最大內存),內存耗盡時將返回錯誤而非淘汰舊數據。
為消除文本協議解析開銷並減少漏洞,memcached 規劃引入二進制協議。協議包由 24 字節固定頭部 + Key + 無結構數據組成。頭部包含 Magic 字節、Opcode、Key/Value 長度、Opaque、CAS 等字段,分為請求頭與響應頭。新協議理論上支持長達 65536 字節的 Key(現行限制 250 字節),將在 1.3 版本支持。
為滿足持久化、複製等需求,memcached 重構為可插拔架構:核心服務器(網絡/事件處理)與存儲引擎解耦,通過精簡的 13 個 API 函數(初始化、統計、分配/釋放 Item、CRUD、算術運算、Flush 等)實現引擎熱插拔。多線程控制完全下放給引擎,確保性能不受影響。此特性同樣計劃在 1.3 版本發布。
本文介紹了 Lazy Expiration、LRU 淘汰策略及禁用方法,並展望了二進制協議與外部引擎支持兩大發展方向,這些特性將進一步增強 memcached 的靈活性與擴展性。