常用緩存技術Memcached、Redis異同與應用場景選擇

緩存就是數據交換的緩衝區Cache。當某一硬件要讀取數據時,會首先從緩存中查找需要的數據,如果找到了則直接執行,找不到的話則從內存中找。由於緩存的運行速度比內存快得多,故緩存的作用就是幫助硬件更快地運行。

緩存工作的原則是“引用的局部性”,這可以分為時間局部性和空間局部性。空間局部性是指CPU在某一時刻需要某個數據,那麼很可能下一步就需要其附近的數據;時間局部性是指當某個數據被訪問過一次之後,過不了多久時間就會被再一次訪問。對於應用程序而言,不管是指令流還是數據流都會出現引用的局部性現象。

在互聯網應用中最廣泛的兩類緩存技術redis和memecache,下面講述兩者的異同與選擇。

redis和memecache的異同與應用場景選擇

沒有必要過多的關注性能,你需要關注內存使用率。對於key-value這樣簡單的數據儲存,memcache的內存使用率更高。如果採用hash結構,redis的內存使用率會更高。當然,這些都依賴於具體的應用場景。

你需要關注關注數據持久化和主從複製時,只有redis擁有這兩個特性。如果你的目標是構建一個緩存在升級或者重啟後之前的數據不會丟失的話,那也只能選擇redis。

你應該關心你需要的操作。redis支持很多複雜的操作,甚至只考慮內存的使用情況,在一個單一操作裡你常常可以做很多,而不需要將數據讀取到客戶端中(這樣會需要很多的IO操作)。這些複雜的操作基本上和純GET和POST操作一樣快,所以你不只是需要GET/SET而是更多的操作時,redis會起很大的作用。

對於兩者的選擇還是要看具體的應用場景,如果需要緩存的數據只是key-value這樣簡單的結構時還是採用memcache,它也足夠的穩定可靠。如果涉及到存儲,排序等一系列複雜的操作時,毫無疑問選擇redis。

關於redis和memcache的不同,下面羅列了一些相關說法,供記錄:

1、存儲方式:

memecache 把數據全部存在內存之中,斷電後會掛掉,數據不能超過內存大小

redis有部份存在硬盤上,這樣能保證數據的持久性,支持數據的持久化。

2、數據支持類型:

redis在數據支持上要比memecache多的多。

3、使用底層模型不同:

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

結論:有持久化需求或者對數據結構和處理有高級要求的應用選擇redis,其他簡單的key/value存儲,選擇memcache

Memcached

Memcached是以LiveJurnal旗下Danga Interactive公司開發的高性能分佈式內存緩存服務器。其本質上就是一個內存key-value數據庫,但是不支持數據的持久化,服務器關閉之後數據全部丟失。Memcached使用C語言開發,在大多數像Linux、BSD和Solaris等POSIX系統上,只要安裝了libevent即可使用。在Windows下,它也有一個可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached 的客戶端軟件實現非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等。當前Memcached使用廣泛,除了LiveJournal以外還有Wikipedia、Flickr、Twitter、Youtube和 WordPress等。

Redis

Redis是一個開源的、廣泛應用的Key/Value的內存數據庫。和Memcached類似,但是支持數據的持久化,解決了斷電後數據完全丟失的情況。而且它支持更多的類型,除了string外,還支持lists(鏈表)、sets(集合)和zsets(有序集合)幾種數據類型。Redis使用C語言開發,在大多數像Linux、BSD和Solaris等POSIX系統上無需任何外部依賴就可以使用。Redis的官網為: http://redis.io/。 Redis的安裝非常方便,只需從http://redis.io/download獲取源碼,然後make && make install即可。

當前Redis的應用已經非常廣泛,國內像新浪、淘寶,國外像 Flickr、Github等均在使用Redis的緩存服務。

常用緩存技術Memcached、Redis異同與應用場景選擇

特別說明

無論Redis、memcached都有云端的服務出現,相對於原來的安裝部署維護,可以省去很多工程工作。比如阿里的 雲數據庫 Memcache 版( ApsaraDB for Memcache )、雲數據庫 Redis 版,其實就是memcached和Redis的雲服務版本。

常用緩存技術Memcached、Redis異同與應用場景選擇

相關推薦

推薦中...