Memcached與Redis有什麼區別

MaChao發表於2020-10-28

Redis 和 Memcached 都是基於記憶體的資料儲存系統。
Memcached是高效能分散式記憶體快取服務,其本質上就是一個記憶體key-value資料庫。
Redis是一個開源的key-value儲存系統。與Memcached類似,Redis將大部分資料儲存在記憶體中,支援的資料型別包括:字串、雜湊表、連結串列、集合、有序集合以及基於這些資料型別的相關操作。
那麼,Memcached與Redis有什麼區別呢?讓我們一起來看一下。

1、資料操作不同

與Memcached僅支援簡單的key-value結構的資料記錄不同,Redis支援的資料型別要豐富得多。Memcached基本只支援簡單的key-value儲存,不支援列舉,不支援持久化和複製等功能。Redis支援伺服器端的資料操作相比Memcached來說,擁有更多的資料結構和並支援更豐富的資料操作,支援list、set、sorted set、hash等眾多資料結構,還同時提供了持久化和複製等功能。而通常在Memcached裡,使用者需要將資料拿到客戶端來進行類似的修改再set回去,這大大增加了網路IO的次數和資料體積。在Redis中,這些複雜的操作通常和一般的GET/SET一樣高效。所以,如果需要快取能夠支援更復雜的結構和操作, Redis會是更好的選擇。

2、記憶體管理機制不同

  • 在Redis中,並不是所有的資料都一直儲存在記憶體中的。這是和Memcached相比一個最大的區別。當實體記憶體用完時,Redis可以將一些很久沒用到的value交換到磁碟。Redis只會快取所有的key的資訊,如果Redis發現記憶體的使用量超過了某一個閥值,將觸發swap的操作,Redis根據“swappability = age*log(size_in_memory)”計算出哪些key對應的value需要swap到磁碟。然後再將這些key對應的value持久化到磁碟中,同時在記憶體中清除。這種特性使得Redis可以保持超過其機器本身記憶體大小的資料。
  • 而Memcached預設使用Slab Allocation機制管理記憶體,其主要思想是按照預先規定的大小,將分配的記憶體分割成特定長度的塊以儲存相應長度的key-value資料記錄,以完全解決記憶體碎片問題。
  • 從記憶體利用率來講,使用簡單的key-value儲存的話,Memcached的記憶體利用率更高。而如果Redis採用hash結構來做key-value儲存,由於其組合式的壓縮,其記憶體利用率會高於Memcached。

3、效能不同

由於Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在儲存小資料時比Memcached效能更高。而在100k以上的資料中,Memcached效能要高於Redis,雖然Redis也在儲存大資料的效能上進行了優化,但是比起Memcached,還是稍有遜色。

4、叢集管理不同

  • Memcached是全記憶體的資料緩衝系統,Redis雖然支援資料的持久化,但是全記憶體畢竟才是其高效能的本質。作為基於記憶體的儲存系統來說,機器實體記憶體的大小就是系統能夠容納的最大資料量。如果需要處理的資料量超過了單臺機器的實體記憶體大小,就需要構建分散式叢集來擴充套件儲存能力。

  • Memcached本身並不支援分散式,因此只能在客戶端通過像一致性雜湊這樣的分散式演算法來實現Memcached的分散式儲存。相較於Memcached只能採用客戶端實現分散式儲存,Redis更偏向於在伺服器端構建分散式儲存。

小結:Redis和Memcached哪個更好?

Redis更多場景是作為Memcached的替代者來使用,當需要除key-value之外的更多資料型別支援或儲存的資料不能被剔除時,使用Redis更合適。如果只做快取的話,Memcached已經足夠應付絕大部分的需求,Redis 的出現只是提供了一個更加好的選擇。總的來說,根據使用者自身的需求去選擇才是最合適的。

www.cnblogs.com/middleware/article...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章