NoSQL的存儲架構——鍵值存儲Memcached和Redis

Memcached

  1. 是一種分佈式高性能對象緩存系統,非常簡潔,只包含最小的功能集,不支持備份,故障轉移或者故障恢復。使用Memcached主要目的通常是減少數據庫負載。

  2. Memcached的核心是一個槽(slab)分配器。Memcached按槽存儲值。槽本身由頁(page)組成,頁又由塊(chunk)或桶(bucket)組成。槽最小1kb,大小按1.25的冪次增長。Memcached可以存儲的值最大不能超過1MB。值通過鍵來存儲和引用。鍵最大是250字節。對象存儲在與其大小最近似的塊或者桶中。會產生浪費和碎片。
  3. Memcached利用LRU算法控制對舊緩存對象的驅逐,以槽爲單位執行。
  4. Memcached作爲一種對象緩存,組織數據元素時並不用集合形式(列表,無需集合,有序集合,映射表)。

Redis

  1. Redis提供了對豐富數據結構的支持,比Memcached要健壯。
  2. Redis中萬物都是字符串。包括列表,無需集合,有序集合,映射表都有字符串組成。
  3. Redis定義了一個特別的結構SDS,稱爲簡單動態字符串,由三部分組成:
    • buff:存儲字符串的字符數組
    • len:buff長度
    • free:可用字節數量
  4. Redis在主內存中保存數據,並按需將其持久化到磁盤中。與MongoDB不同,它沒有使用內存映射文件。而是實現了它自己的虛擬內存子系統。當一個值被換出到磁盤上時,一個指向那個磁盤頁的指針會和鍵一起存儲。
  5. 除了虛擬內存管理器,Redis還包括一個時間庫,用來協調非阻塞的套接字操作。
  6. Redis不依賴於操作系統的虛擬內存交換,因爲其對象不與內存頁一一映射。一個Redis對象可以跨頁,一頁也可以放多個Redis對象。
  7. Redis與MongoDB不同,內存和磁盤中格式不一樣,磁盤中要壓縮存儲,使用自定義交換技術能較少磁盤I/O。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章