redis和memcache的區(qū)別-創(chuàng)新互聯(lián)

簡單區(qū)別:
1. Redis中,并不是所有的數(shù)據(jù)都一直存儲在內(nèi)存中的,這是和Memcached相比一個大的區(qū)別。
2. redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時(shí)還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
3. Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
4. Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、瀍河網(wǎng)絡(luò)推廣、微信小程序定制開發(fā)、瀍河網(wǎng)絡(luò)營銷、瀍河企業(yè)策劃、瀍河品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供瀍河建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:muchs.cn

Redis在很多方面具備數(shù)據(jù)庫的特征,或者說就是一個數(shù)據(jù)庫系統(tǒng),而Memcached只是簡單的K/V緩存

下面是來自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ù)時(shí)比Memcached性能更高。而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis,雖然Redis最近也在存儲大數(shù)據(jù)的性能上進(jìn)行優(yōu)化,但是比起Memcached,還是稍有遜色。說了這么多,結(jié)論是,無論你使用哪一個,每秒處理請求的次數(shù)都不會成為瓶頸。
你需要關(guān)注內(nèi)存使用率。對于key-value這樣簡單的數(shù)據(jù)儲存,memcache的內(nèi)存使用率更高。如果采用hash結(jié)構(gòu),redis的內(nèi)存使用率會更高。當(dāng)然,這些都依賴于具體的應(yīng)用場景。
你需要關(guān)注關(guān)注數(shù)據(jù)持久化和主從復(fù)制時(shí),只有redis擁有這兩個特性。如果你的目標(biāo)是構(gòu)建一個緩存在升級或者重啟后之前的數(shù)據(jù)不會丟失的話,那也只能選擇redis。
你應(yīng)該關(guān)心你需要的操作。redis支持很多復(fù)雜的操作,甚至只考慮內(nèi)存的使用情況,在一個單一操作里你常??梢宰龊芏?,而不需要將數(shù)據(jù)讀取到客戶端中(這樣會需要很多的IO操作)。這些復(fù)雜的操作基本上和純GET和POST操作一樣快,所以你不只是需要GET/SET而是更多的操作時(shí),redis會起很大的作用。
對于兩者的選擇還是要看具體的應(yīng)用場景,如果需要緩存的數(shù)據(jù)只是key-value這樣簡單的結(jié)構(gòu)時(shí),我在項(xiàng)目里還是采用memcache,它也足夠的穩(wěn)定可靠。如果涉及到存儲,排序等一系列復(fù)雜的操作時(shí),毫無疑問選擇redis。

其他:
1、 Redis和Memcache都是將數(shù)據(jù)存放在內(nèi)存中,都是內(nèi)存數(shù)據(jù)庫。不過memcache還可用于緩存其他東西,例如圖片、視頻等等。
2、Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時(shí)還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
3、虛擬內(nèi)存–Redis當(dāng)物理內(nèi)存用完時(shí),可以將一些很久沒用到的value 交換到磁盤
4、過期策略–memcache在set時(shí)就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設(shè)定,例如expire name 10
5、分布式–設(shè)定memcache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一從
6、存儲數(shù)據(jù)安全–memcache掛掉后,數(shù)據(jù)沒了;redis可以定期保存到磁盤(持久化)
7、災(zāi)難恢復(fù)–memcache掛掉后,數(shù)據(jù)不可恢復(fù); redis數(shù)據(jù)丟失后可以通過aof恢復(fù)
8、Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

關(guān)于redis和memcache的不同,下面羅列了一些相關(guān)說法,供記錄:

redis和memecache的不同在于[2]:
1、存儲方式:
memecache 把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(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ù)的話,會浪費(fèi)一定的時(shí)間去移動和請求。
4、運(yùn)行環(huán)境不同:
redis目前官方只支持Linux 上去行,從而省去了對于其它系統(tǒng)的支持,這樣的話可以更好的把精力用于本系統(tǒng) 環(huán)境上的優(yōu)化,雖然后來微軟有一個小組為其寫了補(bǔ)丁。但是沒有放到主干上

個人總結(jié)一下,有持久化需求或者對數(shù)據(jù)結(jié)構(gòu)和處理有高級要求的應(yīng)用,選擇redis,其他簡單的key/value存儲,選擇memcache。

下面重點(diǎn)分析Memcached和Redis兩種方案:
Memcached介紹
Memcached 是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負(fù)載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提供動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度,現(xiàn)在已被LiveJournal、hatena、Facebook、Vox、LiveJournal等公司所使用。

Memcached工作方式分析
許多Web應(yīng)用都將數(shù)據(jù)保存到 RDBMS中,應(yīng)用服務(wù)器從中讀取數(shù)據(jù)并在瀏覽器中顯示。 但隨著數(shù)據(jù)量的增大、訪問的集中,就會出現(xiàn)RDBMS的負(fù)擔(dān)加重、數(shù)據(jù)庫響應(yīng)惡化、 網(wǎng)站顯示延遲等重大影響。Memcached是高性能的分布式內(nèi)存緩存服務(wù)器,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)Web等應(yīng)用的速度、 提高可擴(kuò)展性。下圖展示了memcache與數(shù)據(jù)庫端協(xié)同工作情況:
redis和memcache的區(qū)別
其中的過程是這樣的:
1.檢查用戶請求的數(shù)據(jù)是緩存中是否有存在,如果有存在的話,只需要直接把請求的數(shù)據(jù)返回,無需查詢數(shù)據(jù)庫。
2.如果請求的數(shù)據(jù)在緩存中找不到,這時(shí)候再去查詢數(shù)據(jù)庫。返回請求數(shù)據(jù)的同時(shí),把數(shù)據(jù)存儲到緩存中一份。
3.保持緩存的“新鮮性”,每當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候(比如,數(shù)據(jù)有被修改,或被刪除的情況下),要同步的更新緩存信息,確保用戶不會在緩存取到舊的數(shù)據(jù)。

Memcached作為高速運(yùn)行的分布式緩存服務(wù)器,具有以下的特點(diǎn):
1.協(xié)議簡單
2.基于libevent的事件處理
3.內(nèi)置內(nèi)存存儲方式
4.memcached不互相通信的分布式

如何實(shí)現(xiàn)分布式可拓展性?
Memcached的分布式不是在服務(wù)器端實(shí)現(xiàn)的,而是在客戶端應(yīng)用中實(shí)現(xiàn)的,即通過內(nèi)置算法制定目標(biāo)數(shù)據(jù)的節(jié)點(diǎn),如下圖所示:
redis和memcache的區(qū)別

Redis 介紹
Redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、 list(鏈表)、set(集合)和zset(有序集合)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步,當(dāng)前 Redis的應(yīng)用已經(jīng)非常廣泛,國內(nèi)像新浪、淘寶,國外像 Flickr、Github等均在使用Redis的緩存服務(wù)。

Redis 工作方式分析
Redis作為一個高性能的key-value數(shù)據(jù)庫具有以下特征:
1.多樣的數(shù)據(jù)模型
2.持久化
3.主從同步
Redis支持豐富的數(shù)據(jù)類型,最為常用的數(shù)據(jù)類型主要由五種:String、Hash、List、Set和Sorted Set。Redis通常將數(shù)據(jù)存儲于內(nèi)存中,或被配置為使用虛擬內(nèi)存。Redis有一個很重要的特點(diǎn)就是它可以實(shí)現(xiàn)持久化數(shù)據(jù),通過兩種方式可以實(shí)現(xiàn)數(shù)據(jù)持久化:使用RDB快照的方式,將內(nèi)存中的數(shù)據(jù)不斷寫入磁盤;或使用類似MySQL的AOF日志方式,記錄每次更新的日志。前者性能較高,但是可能會引起一定程度的數(shù)據(jù)丟失;后者相反。 Redis支持將數(shù)據(jù)同步到多臺從數(shù)據(jù)庫上,這種特性對提高讀取性能非常有益。

Redis如何實(shí)現(xiàn)分布式可拓展性?
2.8以前的版本:與Memcached一致,可以在客戶端實(shí)現(xiàn),也可以使用代理,twitter已開發(fā)出用于Redis和Memcached的代理Twemproxy 。
3.0 以后的版本:相較于Memcached只能采用客戶端實(shí)現(xiàn)分布式存儲,Redis則在服務(wù)器端構(gòu)建分布式存儲。Redis Cluster是一個實(shí)現(xiàn)了分布式且允許單點(diǎn)故障的Redis高級版本,它沒有中心節(jié)點(diǎn),各個節(jié)點(diǎn)地位一致,具有線性可伸縮的功能。如圖給出Redis Cluster的分布式存儲架構(gòu),其中節(jié)點(diǎn)與節(jié)點(diǎn)之間通過二進(jìn)制協(xié)議進(jìn)行通信,節(jié)點(diǎn)與客戶端之間通過ascii協(xié)議進(jìn)行通信。在數(shù)據(jù)的放置策略上,Redis Cluster將整個 key的數(shù)值域分成16384個哈希槽,每個節(jié)點(diǎn)上可以存儲一個或多個哈希槽,也就是說當(dāng)前Redis Cluster支持的大節(jié)點(diǎn)數(shù)就是16384。
redis和memcache的區(qū)別

綜合結(jié)論

應(yīng)該說Memcached和Redis都能很好的滿足解決我們的問題,它們性能都很高,總的來說,可以把Redis理解為是對Memcached的拓展,是更加重量級的實(shí)現(xiàn),提供了更多更強(qiáng)大的功能。具體來說:

1.性能上:
性能上都很出色,具體到細(xì)節(jié),由于Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在存儲小數(shù)據(jù)時(shí)比
Memcached性能更高。而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis,雖然Redis最近也在存儲大數(shù)據(jù)的性能上進(jìn)行優(yōu)化,但是比起 Memcached,還是稍有遜色。

2.內(nèi)存空間和數(shù)據(jù)量大?。?br />MemCached可以修改大內(nèi)存,采用LRU算法。Redis增加了VM的特性,突破了物理內(nèi)存的限制。

3.操作便利上:
MemCached數(shù)據(jù)結(jié)構(gòu)單一,僅用來緩存數(shù)據(jù),而Redis支持更加豐富的數(shù)據(jù)類型,也可以在服務(wù)器端直接對數(shù)據(jù)進(jìn)行豐富的操作,這樣可以減少網(wǎng)絡(luò)IO次數(shù)和數(shù)據(jù)體積。

4.可靠性上:
MemCached不支持?jǐn)?shù)據(jù)持久化,斷電或重啟后數(shù)據(jù)消失,但其穩(wěn)定性是有保證的。Redis支持?jǐn)?shù)據(jù)持久化和數(shù)據(jù)恢復(fù),允許單點(diǎn)故障,但是同時(shí)也會付出性能的代價(jià)。

5.應(yīng)用場景:
Memcached:動態(tài)系統(tǒng)中減輕數(shù)據(jù)庫負(fù)載,提升性能;做緩存,適合多讀少寫,大數(shù)據(jù)量的情況(如人人網(wǎng)大量查詢用戶信息、好友信息、文章信息等)。
Redis:適用于對讀寫效率要求都很高,數(shù)據(jù)處理業(yè)務(wù)復(fù)雜和對安全性要求較高的系統(tǒng)(如新浪微博的計(jì)數(shù)和微博發(fā)布部分系統(tǒng),對數(shù)據(jù)安全性、讀寫要求都很高)。

需要慎重考慮的部分
1.Memcached單個key-value大小有限,一個value大只支持1MB,而Redis大支持512MB
2.Memcached只是個內(nèi)存緩存,對可靠性無要求;而Redis更傾向于內(nèi)存數(shù)據(jù)庫,因此對對可靠性方面要求比較高
3.從本質(zhì)上講,Memcached只是一個單一key-value內(nèi)存Cache;而Redis則是一個數(shù)據(jù)結(jié)構(gòu)內(nèi)存數(shù)據(jù)庫,支持五種數(shù)據(jù)類型,因此Redis除單純緩存作用外,還可以處理一些簡單的邏輯運(yùn)算,Redis不僅可以緩存,而且還可以作為數(shù)據(jù)庫用
4.新版本(3.0)的Redis是指集群分布式,也就是說集群本身均衡客戶端請求,各個節(jié)點(diǎn)可以交流,可拓展行、可維護(hù)性更強(qiáng)大。

ref:

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:redis和memcache的區(qū)別-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://muchs.cn/article38/degssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站制作、App開發(fā)、網(wǎng)站營銷、微信公眾號網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)