首頁  >  文章  >  資料庫  >  Redis與Memcache的差別是什麼?

Redis與Memcache的差別是什麼?

青灯夜游
青灯夜游原創
2019-06-17 11:02:2912078瀏覽

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

Redis與Memcache的差別是什麼?

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與Memcache的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn