Memcahce和Redis比較

來源:互聯網
上載者:User

一、Memcache

1.     memecache 把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小
redis有部份存在硬碟上,這樣能保證資料的持久性。

2.      Memcache使用了Slab Allocator的記憶體配置機制:按照預先規定的大小,將分配的記憶體分割成特定長度的塊,以完全解決記憶體片段問題。

3.      memcache 存在記憶體中,分配的記憶體滿後,會按一定的規則刪除一些k/v資料,重啟後自然全部丟失。

4.      到期策略--memcache在set時就指定,例如set key1 0 0 8,即永不到期。Redis可以通過例如expire 設定。

5.      首先要說明的是Memcached支援最大的儲存物件為1M。它的記憶體配置比較特殊,但是這樣的分配方式其實也是基於效能考慮的,簡單的分配機制可以更容易回收再分配,節省對CPU的使用。大於1M需要拆分。

6.      memcached能接受的key的最大長度是,255字元。

7.     同一份資料同時發送了一個set命令和一個get命令,它們不會影響對方,但是get以後,處理期間可能先被其他Set了,後面的Set會覆蓋前面的,但是memcached 1.2.5以及更高版本,提供了gets和cas命令,它們可以解決上面的問題。如果您使用gets命令查詢某個key的item,memcached會 給您返回該item當前值的唯一標識。如果您覆寫了這個item並想把它寫回到memcached中,您可以通過cas命令把那個唯一標識一起發送給 memcached。如果該item存放在memcached中的唯一標識與您提供的一致,您的寫操作將會成功。如果另一個進程在這期間也修改了這個 item,那麼該item存放在memcached中的唯一標識將會改變,您的寫操作就會失敗。

8.     無身分識別驗證,認為身分識別驗證是更高層的問題。

9.     刪除Delete操作只是將該chunk置為刪除狀態,這樣在下次使用將優先利用這樣的chunk。

10.             Flush操作相當於將所有的item失效的一個動作。並不會改變memcache記憶體配置情況。

11.         memcache已經分配的記憶體不會再主動清理。

12.         memcache分配給某個slab的記憶體頁不能再分配給其他slab。

13.         flush_all不能重設memcache分配記憶體頁的格局,只是給所有的item置為到期。

14.         memcache最大儲存的item(key+value)大小限制為1M,這由page大小1M限制。

15.         由於memcache的分布式是用戶端程式通過hash演算法得到的key模數來實現,不同的語言可能會採用不同的hash演算法,同樣的用戶端程式也有可能使用相異的方法,因此在多語言、多模組共用同一組memcached服務時,一定要注意在用戶端選擇相同的hash演算法。

16.         啟動memcached時可以通過-M參數禁止LRU替換,在記憶體用盡時add和set會返回失敗。

17.         memcached啟動時指定的是資料存放區量,沒有包括本身佔用的記憶體、以及為了儲存資料而設定的管理空間。因此它佔用的記憶體量會多於啟動時指定的記憶體配置量,這點需要注意。

 

二、Redis

1.      Redis不僅僅支援簡單的k/v類型的資料,同時還提供list,set,hash等資料結構的儲存。

2.  Redis支援資料的備份,即master-slave模式的資料備份。

3.  Redis支援資料的持久化,可以將記憶體中的資料保持在磁碟中,重啟的時候可以再次載入進行使用。

4.  Redis,具備一定的資料庫特徵。

5.  Redis資料可以儲存到硬碟,基本沒有到期策略。

6.  redis有一個致命缺陷 當記憶體滿了時 dump資料cpu佔用100%。

7.   

三、Memcache和Redis區別

  1. Redis中,並不是所有的資料都一直儲存在記憶體中的,這是和Memcached相比一個最大的區別。
  2. Redis在很多方面具備資料庫的特徵,或者說就是一個資料庫系統,而Memcached只是簡單的K/V緩衝。
  3. 他們的擴充都需要做叢集;實現方式:master-slave、Hash。
  4. 在100k以上的資料中,Memcached效能要高於Redis。
  5. 如果要說記憶體使用量效率,使用簡單的key-value儲存的話,Memcached的記憶體利用率更高,而如果Redis採用hash結構來做key-value儲存,由於其組合式的壓縮,其記憶體利用率會高於Memcached。當然,這和你的應用情境和資料特性有關。
  6. 如果你對資料持久化和資料同步有所要求,那麼推薦你選擇Redis,因為這兩個特性Memcached都不具備。即使你只是希望在升級或者重啟系統後快取資料不會丟失,選擇Redis也是明智的。
  7. Redis和Memcache在寫入效能上面差別不大,讀取效能上面尤其是批量讀取效能上面Memcache更強。

 

 

 

四、其他分布式緩衝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.