redis和memcahe都是通過tcp直接存取的
?
在選擇內(nèi)存數(shù)據(jù)庫的時候到底什么時候選擇redis,什么時候選擇memcache,然后就查到下面對應(yīng)的資料,是來自redis作者的說法(stackoverflow上面)。
? ? You should not care too much about performances. Redis is faster per core with small values, but memcached is able to use multiple cores with a single executable and TCP port without help from the client. Also memcached is faster with big values in the order of 100k. Redis recently improved a lot about big values (unstable branch) but still memcached is faster in this use case. The point here is: nor one or the other will likely going to be your bottleneck for the query-per-second they can deliver.
? ? You should care about memory usage. For simple key-value pairs memcached is more memory efficient. If you use Redis hashes, Redis is more memory efficient. Depends on the use case.
? ??You should care about persistence and replication, two features only available in Redis. Even if your goal is to build a cache it helps that after an upgrade or a reboot your data are still there.
? ??You should care about the kind of operations you need. In Redis there are a lot of complex operations, even just considering the caching use case, you often can do a lot more in a single operation, without requiring data to be processed client side (a lot of I/O is sometimes needed). This operations are often as fast as plain GET and SET. So if you don’t need just GEt/SET but more complex things Redis can help a lot (think at timeline caching).
? ? 有網(wǎng)友翻譯如下[1]:
? ??沒有必要過多的關(guān)注性能。由于Redis只使用單核,而Memcached可以使用多核,所以在比較上,平均每一個核上Redis在存儲小數(shù)據(jù)時比Memcached性能更高。而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis,雖然Redis最近也在存儲大數(shù)據(jù)的性能上進行優(yōu)化,但是比起Memcached,還是稍有遜色。說了這么多,結(jié)論是,無論你使用哪一個,每秒處理請求的次數(shù)都不會成為瓶頸。
為什么這么說呢,理由就是Redis是單線程運行的。
因為是單線程運行,所以和Memcached的多線程相比,整體性能肯定會偏低。
因為是單線程運行,所以IO是串行化的,網(wǎng)絡(luò)IO和內(nèi)存IO,因此當單條數(shù)據(jù)太大時,由于需要等待一個命令的所有IO完成才能進行后續(xù)的命令,所以性能會受影響。
而就內(nèi)存使用上來說,目前Redis結(jié)合了tcmalloc和jemalloc兩個內(nèi)存分配器,基本上和Memcached不相伯仲。如果是簡單且有規(guī)律的key value存儲,那么用Redis的hash結(jié)構(gòu)來做,內(nèi)存使用上會驚人的變小,優(yōu)勢是很明顯的。
?
http://www.biaodianfu.com/redis-vs-memcached.html
? ??你需要關(guān)注內(nèi)存使用率。對于key-value這樣簡單的數(shù)據(jù)儲存,memcache的內(nèi)存使用率更高。如果采用hash結(jié)構(gòu),redis的內(nèi)存使用率會更高。當然,這些都依賴于具體的應(yīng)用場景。
? ??你需要關(guān)注關(guān)注數(shù)據(jù)持久化和主從復(fù)制時,只有redis擁有這兩個特性。如果你的目標是構(gòu)建一個緩存在升級或者重啟后之前的數(shù)據(jù)不會丟失的話,那也只能選擇redis。
? ??你應(yīng)該關(guān)心你需要的操作。redis支持很多復(fù)雜的操作,甚至只考慮內(nèi)存的使用情況,在一個單一操作里你常常可以做很多,而不需要將數(shù)據(jù)讀取到客戶端中(這樣會需要很多的IO操作)。這些復(fù)雜的操作基本上和純GET和POST操作一樣快,所以你不只是需要GET/SET而是更多的操作時,redis會起很大的作用。
? ??對于兩者的選擇還是要看具體的應(yīng)用場景,如果需要緩存的數(shù)據(jù)只是key-value這樣簡單的結(jié)構(gòu)時,我在項目里還是采用memcache,它也足夠的穩(wěn)定可靠。如果涉及到存儲,排序等一系列復(fù)雜的操作時,毫無疑問選擇redis。
? ?
? ? 關(guān)于redis和memcache的不同,下面羅列了一些相關(guān)說法,供記錄:
? ??redis和memecache的不同在于[2]:
? ? 1、存儲方式:
? ? memecache 把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大小
? ? redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性,支持數(shù)據(jù)的持久化(筆者注:有快照和AOF日志兩種持久化方式,在實際應(yīng)用的時候,要特別注意配置文件快照參數(shù),要不就很有可能服務(wù)器頻繁滿載做dump)。
? ? 2、數(shù)據(jù)支持類型:
? ? redis在數(shù)據(jù)支持上要比memecache多的多。
? ? 3、使用底層模型不同:
? ? 新版本的redis直接自己構(gòu)建了VM 機制 ,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會浪費一定的時間去移動和請求。
? ? 4、運行環(huán)境不同:
? ? redis目前官方只支持LINUX 上去行,從而省去了對于其它系統(tǒng)的支持,這樣的話可以更好的把精力用于本系統(tǒng) 環(huán)境上的優(yōu)化,雖然后來微軟有一個小組為其寫了補丁。但是沒有放到主干上
5、 分布式存儲
redis支持master-slave復(fù)制模式
memcache可以使用一致性hash做分布式
6、 value大小不同
?memcache是一個內(nèi)存緩存,key的長度小于250字符,單個item存儲要小于1M,不適合虛擬機使用
7、 數(shù)據(jù)一致性不同
redis使用的是單線程模型,保證了數(shù)據(jù)按順序提交。
memcache需要使用cas保證數(shù)據(jù)一致性。CAS(Check and Set)是一個確保并發(fā)一致性的機制,屬于“樂觀鎖”范疇;原理很簡單:拿版本號,操作,對比版本號,如果一致就操作,不一致就放棄任何操作
8、 cpu利用
redis單線程模型只能使用一個cpu,可以開啟多個redis進程
9、 3. Redis支持數(shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
10、 ?Redis和Memcache都是將數(shù)據(jù)存放在內(nèi)存中,都是內(nèi)存數(shù)據(jù)庫。不過memcache還可用 于緩存其他東西,例如圖片、視頻等等。
?
個人總結(jié)一下,有持久化需求或者對數(shù)據(jù)結(jié)構(gòu)和處理有高級要求的應(yīng)用,選擇redis,其他簡單的key/value存儲,選擇memcache。
?
redis使用場景:
http://www.linuxeden.com/html/itnews/20131010/144377.html
redis集群:
http://www.cnblogs.com/lulu/archive/2013/06/10/3130878.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
