Redis和Memcache對(duì)比與如何選擇
我這段時(shí)間在用redis,感覺(jué)挺方便的,但比較疑惑在選擇內(nèi)存數(shù)據(jù)庫(kù)的時(shí)候到底什么時(shí)候選擇redis,什么時(shí)候選擇memcache,然后就查到下面對(duì)應(yīng)的資料,是來(lái)自redis作者的說(shuō)法(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]:
沒(méi)有必要過(guò)多的關(guān)注性能。由于Redis只使用單核,而Memcached可以使用多核,所以在比較上,平均每一個(gè)核上Redis在存儲(chǔ)小數(shù)據(jù)時(shí)比Memcached性能更高。而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis,雖然Redis最近也在存儲(chǔ)大數(shù)據(jù)的性能上進(jìn)行優(yōu)化,但是比起Memcached,還是稍有遜色。說(shuō)了這么多,結(jié)論是,無(wú)論你使用哪一個(gè),每秒處理請(qǐng)求的次數(shù)都不會(huì)成為瓶頸。
你需要關(guān)注內(nèi)存使用率。對(duì)于key-value這樣簡(jiǎn)單的數(shù)據(jù)儲(chǔ)存,memcache的內(nèi)存使用率更高。如果采用hash結(jié)構(gòu),redis的內(nèi)存使用率會(huì)更高。當(dāng)然,這些都依賴于具體的應(yīng)用場(chǎng)景。
你需要關(guān)注關(guān)注數(shù)據(jù)持久化和主從復(fù)制時(shí),只有redis
擁有這兩個(gè)特性。如果你的目標(biāo)是構(gòu)建一個(gè)緩存在升級(jí)或者重啟后之前的數(shù)據(jù)不會(huì)丟失的話,那也只能選擇redis。
你應(yīng)該關(guān)心你需要的操作。redis支持很多復(fù)雜的操作,甚至只考慮內(nèi)存的使用情況,在一個(gè)單一操作里你常??梢宰龊芏?,而不需要將數(shù)據(jù)讀取到客戶端中(這樣會(huì)需要很多的IO操作)。這些復(fù)雜的操作基本上和純GET和POST操作一樣快,所以你不只是需要GET/SET而是更多的操作時(shí),redis會(huì)起很大的作用。
對(duì)于兩者的選擇還是要看具體的應(yīng)用場(chǎng)景,如果需要緩存的數(shù)據(jù)只是key-value這樣簡(jiǎn)單的結(jié)構(gòu)時(shí),我在項(xiàng)目里還是采用memcache,它也足夠的穩(wěn)定可靠。如果涉及到存儲(chǔ),排序等一系列復(fù)雜的操作時(shí),毫無(wú)疑問(wèn)選擇redis。
關(guān)于redis和memcache的不同,下面羅列了一些相關(guān)說(shuō)法,供記錄:
redis和memecache的不同在于[2]:
1、存儲(chǔ)方式:
memecache 把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會(huì)掛掉,數(shù)據(jù)不能超過(guò)內(nèi)存大小
redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性,支持?jǐn)?shù)據(jù)的持久化(筆者注:有快照和AOF日志兩種持久化方式,在實(shí)際應(yīng)用的時(shí)候,要特別注意配置文件快照參數(shù),要不就很有可能服務(wù)器頻繁滿載做dump)。
2、數(shù)據(jù)支持類型:
redis在數(shù)據(jù)支持上要比memecache多的多。
3、使用底層模型不同:
新版本的redis直接自己構(gòu)建了VM 機(jī)制 ,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求。
4、運(yùn)行環(huán)境不同:
redis目前官方只支持LINUX 上去行,從而省去了對(duì)于其它系統(tǒng)的支持,這樣的話可以更好的把精力用于本系統(tǒng) 環(huán)境上的優(yōu)化,雖然后來(lái)微軟有一個(gè)小組為其寫了補(bǔ)丁。但是沒(méi)有放到主干上
個(gè)人總結(jié)一下,有持久化需求或者對(duì)數(shù)據(jù)結(jié)構(gòu)和處理有高級(jí)要求的應(yīng)用,選擇redis,其他簡(jiǎn)單的key/value存儲(chǔ),選擇memcache。
到此這篇關(guān)于Redis和Memcache對(duì)比與如何選擇的文章就介紹到這了,更多相關(guān)Redis和Memcache對(duì)比內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
win2003服務(wù)器一招廢掉所有木馬(防提權(quán))
木馬的危害,在于它能夠遠(yuǎn)程控制你的電腦。當(dāng)你成為“肉雞”的時(shí)候,別人(控制端)就可以進(jìn)入你的電腦,偷看你的文件、盜竊密碼、甚至用你的QQ發(fā)一些亂七八糟的東西給你的好友2012-03-03ssh更改默認(rèn)端口號(hào)及實(shí)現(xiàn)免密碼遠(yuǎn)程登錄
這篇文章主要介紹了ssh更改默認(rèn)端口號(hào)及實(shí)現(xiàn)免密碼遠(yuǎn)程登錄的相關(guān)資料,需要的朋友可以參考下2017-10-10服務(wù)器中aux,com1,com2,prn,con,nul等特殊文件刪除方法
如果你在遇到CON不能刪除,PRN不能刪除,LPT不能刪除,COM1不能刪除,COM2不能刪除,COM3不能刪除,COM4不能刪除,COM5不能刪除,COM6不能刪除,COM7不能除,COM8不能刪除,NUL不能刪除、AUX不能刪除2012-04-04Python和c++代碼實(shí)現(xiàn)高性能異構(gòu)分布式并行互聯(lián)系統(tǒng)
這篇文章主要介紹了Python和c++代碼實(shí)現(xiàn)高性能異構(gòu)分布式并行互聯(lián)系統(tǒng),包含通信模塊、任務(wù)調(diào)度模塊、數(shù)據(jù)管理模塊、負(fù)載均衡模塊、故障容錯(cuò)模塊、性能優(yōu)化模塊、日志與監(jiān)控模塊,需要的朋友可以參考下2024-08-08RustDesk?Server服務(wù)器搭建教程含api服務(wù)器和webclient服務(wù)器
RustDesk支持安卓?mac?window?iphone?任意兩個(gè)設(shè)備進(jìn)行遠(yuǎn)程控制,不包括api服務(wù)器和webclient客戶端,本教程教大家RustDesk?Server服務(wù)器搭建教程含api服務(wù)器和webclient服務(wù)器,感興趣的朋友一起看看吧2023-12-12在Windows平臺(tái)下安裝與配置Memcached的方法分享
在Windows平臺(tái)下安裝與配置Memcached的方法,Memcached 是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),用于動(dòng)態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫(kù)負(fù)載2012-05-05MongoDB學(xué)習(xí)筆記(一) MongoDB介紹與安裝方法
最近開(kāi)始學(xué)習(xí)非關(guān)系型數(shù)據(jù)庫(kù)MongoDB,卻在博客園上找不到比較系統(tǒng)的教程,很多資料都要去查閱英文網(wǎng)站,效率比較低下。本人不才,借著自學(xué)的機(jī)會(huì)把心得體會(huì)都記錄下來(lái),方便感興趣的童鞋分享討論2013-07-07