Memcached
- 是一種分佈式高性能對象緩存系統,非常簡潔,只包含最小的功能集,不支持備份,故障轉移或者故障恢復。使用Memcached主要目的通常是減少數據庫負載。
- Memcached的核心是一個槽(slab)分配器。Memcached按槽存儲值。槽本身由頁(page)組成,頁又由塊(chunk)或桶(bucket)組成。槽最小1kb,大小按1.25的冪次增長。Memcached可以存儲的值最大不能超過1MB。值通過鍵來存儲和引用。鍵最大是250字節。對象存儲在與其大小最近似的塊或者桶中。會產生浪費和碎片。
- Memcached利用LRU算法控制對舊緩存對象的驅逐,以槽爲單位執行。
- Memcached作爲一種對象緩存,組織數據元素時並不用集合形式(列表,無需集合,有序集合,映射表)。
Redis
- Redis提供了對豐富數據結構的支持,比Memcached要健壯。
- Redis中萬物都是字符串。包括列表,無需集合,有序集合,映射表都有字符串組成。
- Redis定義了一個特別的結構SDS,稱爲簡單動態字符串,由三部分組成:
- buff:存儲字符串的字符數組
- len:buff長度
- free:可用字節數量
- Redis在主內存中保存數據,並按需將其持久化到磁盤中。與MongoDB不同,它沒有使用內存映射文件。而是實現了它自己的虛擬內存子系統。當一個值被換出到磁盤上時,一個指向那個磁盤頁的指針會和鍵一起存儲。
- 除了虛擬內存管理器,Redis還包括一個時間庫,用來協調非阻塞的套接字操作。
- Redis不依賴於操作系統的虛擬內存交換,因爲其對象不與內存頁一一映射。一個Redis對象可以跨頁,一頁也可以放多個Redis對象。
- Redis與MongoDB不同,內存和磁盤中格式不一樣,磁盤中要壓縮存儲,使用自定義交換技術能較少磁盤I/O。