Redis和Memcache區別,優缺點對比

2022-05-01 12:51:12 字數 3421 閱讀 4160

redis和memecache的不同在於[2]: 

1、儲存方式: 

memecache 把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小 

redis有部份存在硬碟上,這樣能保證資料的永續性,支援資料的持久化(筆者注:有快照和aof日誌兩種持久化方式,在實際應用的時候,要特別注意配置檔案快照引數,要不就很有可能伺服器頻繁滿載做dump)。 

2、資料支援型別: 

redis在資料支援上要比memecache多的多。 

3、使用底層模型不同: 

新版本的redis直接自己構建了vm 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求。 

4、執行環境不同: 

redis目前官方只支援linux 上去行,從而省去了對於其它系統的支援,這樣的話可以更好的把精力用於本系統 環境上的優化,雖然後來微軟有乙個小組為其寫了補丁。但是沒有放到主幹上

個人總結一下,有持久化需求或者對資料結構和處理有高階要求的應用,選擇redis,其他簡單的key/value儲存,選擇memcache。

下面重點分析memcached和redis兩種方案:

memcached介紹 

memcached 是乙個高效能的分布式記憶體物件快取系統,用於動態web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提供動態、資料庫驅動**的速度,現在已被livejournal、hatena、facebook、vox、livejournal等公司所使用。

memcached工作方式分析 

許多web應用都將資料儲存到 rdbms中,應用伺服器從中讀取資料並在瀏覽器中顯示。 但隨著資料量的增大、訪問的集中,就會出現rdbms的負擔加重、資料庫響應惡化、 **顯示延遲等重大影響。memcached是高效能的分布式記憶體快取伺服器,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態web等應用的速度、 提高可擴充套件性。下圖展示了memcache與資料庫端協同工作情況: 

其中的過程是這樣的: 

1.檢查使用者請求的資料是快取中是否有存在,如果有存在的話,只需要直接把請求的資料返回,無需查詢資料庫。 

2.如果請求的資料在快取中找不到,這時候再去查詢資料庫。返回請求資料的同時,把資料儲存到快取中乙份。 

3.保持快取的「新鮮性」,每當資料發生變化的時候(比如,資料有被修改,或被刪除的情況下),要同步的更新快取資訊,確保使用者不會在快取取到舊的資料。

memcached作為高速執行的分布式快取伺服器,具有以下的特點: 

1.協議簡單 

2.基於libevent的事件處理 

3.內建記憶體儲存方式 

4.memcached不互相通訊的分布式

如何實現分布式可拓展性? 

memcached的分布式不是在伺服器端實現的,而是在客戶端應用中實現的,即通過內建演算法制定目標資料的節點,如下圖所示: 

redis 工作方式分析 

redis作為乙個高效能的key-value資料庫具有以下特徵: 

1.多樣的資料模型 

2.持久化 

3.主從同步 

redis支援豐富的資料型別,最為常用的資料型別主要由五種:string、hash、list、set和sorted set。redis通常將資料儲存於記憶體中,或被配置為使用虛擬記憶體。redis有乙個很重要的特點就是它可以實現持久化資料,通過兩種方式可以實現資料持久化:使用rdb快照的方式,將記憶體中的資料不斷寫入磁碟;或使用類似mysql的aof日誌方式,記錄每次更新的日誌。前者效能較高,但是可能會引起一定程度的資料丟失;後者相反。 redis支援將資料同步到多台從資料庫上,這種特性對提高讀取效能非常有益。

redis如何實現分布式可拓展性? 

2.8以前的版本:與memcached一致,可以在客戶端實現,也可以使用**,twitter已開發出用於redis和memcached的**twemproxy 。 

3.0 以後的版本:相較於memcached只能採用客戶端實現分布式儲存,redis則在伺服器端構建分布式儲存。redis cluster是乙個實現了分布式且允許單點故障的redis高階版本,它沒有中心節點,各個節點地位一致,具有線性可伸縮的功能。如圖給出redis cluster的分布式儲存架構,其中節點與節點之間通過二進位制協議進行通訊,節點與客戶端之間通過ascii協議進行通訊。在資料的放置策略上,redis cluster將整個 key的數值域分成16384個雜湊槽,每個節點上可以儲存乙個或多個雜湊槽,也就是說當前redis cluster支援的最大節點數就是16384。 

綜合結論

應該說memcached和redis都能很好的滿足解決我們的問題,它們效能都很高,總的來說,可以把redis理解為是對memcached的拓展,是更加重量級的實現,提供了更多更強大的功能。具體來說:

1.效能上: 

效能上都很出色,具體到細節,由於redis只使用單核,而memcached可以使用多核,所以平均每乙個核上redis在儲存小資料時比 

memcached效能更高。而在100k以上的資料中,memcached效能要高於redis,雖然redis最近也在儲存大資料的效能上進行優化,但是比起 memcached,還是稍有遜色。

2.記憶體空間和資料量大小: 

memcached可以修改最大記憶體,採用lru演算法。redis增加了vm的特性,突破了物理記憶體的限制。

3.操作便利上: 

memcached資料結構單一,僅用來快取資料,而redis支援更加豐富的資料型別,也可以在伺服器端直接對資料進行豐富的操作,這樣可以減少網路io次數和資料體積。

4.可靠性上: 

memcached不支援資料持久化,斷電或重啟後資料消失,但其穩定性是***的。redis支援資料持久化和資料恢復,允許單點故障,但是同時也會付出效能的代價。

需要慎重考慮的部分

1.memcached單個key-value大小有限,乙個value最大只支援1mb,而redis最大支援512mb 

2.memcached只是個記憶體快取,對可靠性無要求;而redis更傾向於記憶體資料庫,因此對對可靠性方面要求比較高 

3.從本質上講,memcached只是乙個單一key-value記憶體cache;而redis則是乙個資料結構記憶體資料庫,支援五種資料型別,因此redis除單純快取作用外,還可以處理一些簡單的邏輯運算,redis不僅可以快取,而且還可以作為資料庫用 

4.新版本(3.0)的redis是指集群分布式,也就是說集群本身均衡客戶端請求,各個節點可以交流,可拓展行、可維護性更強大。

ref:

memcache和memcached的區別

php的客戶端擴充套件有memcache和memcached擴充套件2種 php的memcache擴充套件 php的memcached擴充套件 d首先要使用memcached必須要安裝,而其事件驅動是基於libevent的,所以要先安裝libevent,然後再安裝memcached 用了段時間的me...

redis應用場景與memcache的區別

1.redis有哪些資料型別?string,hash,set,zset,list 2.redis和memcache的區別是什麼?從儲存大小memcached單個key value大小有限,乙個value最大只支援1mb,key 最大250個字元,而redis最大支援512mb 從可靠性memcach...

memcache和redis的區別

redis和memecache的不同在於 1 儲存方式 memecache 把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小 redis有部份存在硬碟上,這樣能保證資料的永續性。2 資料支援型別 redis在資料支援上要比memecache多的多。3 使用底層模型不同 新版本的redi...