0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

redis、memcache原理對(duì)比

lhl545545 ? 來(lái)源:電子發(fā)燒友網(wǎng) ? 2018-02-09 15:31 ? 次閱讀

memcache、redis原理對(duì)比

一、問(wèn)題:

數(shù)據(jù)庫(kù)表數(shù)據(jù)量極大(千萬(wàn)條),要求讓服務(wù)器更加快速地響應(yīng)用戶的需求。

二、解決方案:

1.通過(guò)高速服務(wù)器Cache緩存數(shù)據(jù)庫(kù)數(shù)據(jù)

2.內(nèi)存數(shù)據(jù)庫(kù)

(這里僅從數(shù)據(jù)緩存方面考慮,當(dāng)然,后期可以采用Hadoop+HBase+Hive等分布式存儲(chǔ)分析平臺(tái))

三、主流解Cache和數(shù)據(jù)庫(kù)對(duì)比:

redis、memcache原理對(duì)比

上述技術(shù)基本上代表了當(dāng)今在數(shù)據(jù)存儲(chǔ)方面所有的實(shí)現(xiàn)方案,其中主要涉及到了普通關(guān)系型數(shù)據(jù)庫(kù)(MySQL/PostgreSQL),NoSQL數(shù)據(jù)庫(kù)(MongoDB),內(nèi)存數(shù)據(jù)庫(kù)(Redis),內(nèi)存Cache(Memcached),我們現(xiàn)在需要的是對(duì)大數(shù)據(jù)表仍保持高效的查詢速度,普通關(guān)系型數(shù)據(jù)庫(kù)是無(wú)法滿足的。而MongoDB其實(shí)只是一種非關(guān)系型數(shù)據(jù)庫(kù),其優(yōu)勢(shì)在于可以存儲(chǔ)海量數(shù)據(jù),具備強(qiáng)大的查詢功能,因此不宜用于緩存數(shù)據(jù)的場(chǎng)景。

從以上各數(shù)據(jù)可知,對(duì)于我們產(chǎn)品最可行的技術(shù)方案有兩種:

1.Memcached 內(nèi)存Key-Value Cache

2.Redis 內(nèi)存數(shù)據(jù)庫(kù)

四、下面重點(diǎn)分析Memcached和Redis兩種方案:

4.1 Memcached介紹

Memcached 是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),用于動(dòng)態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫(kù)負(fù)載。它通過(guò)在內(nèi)存中緩存數(shù)據(jù)和對(duì)象來(lái)減少讀取數(shù)據(jù)庫(kù)的次數(shù),從而提供動(dòng)態(tài)、數(shù)據(jù)庫(kù)驅(qū)動(dòng)網(wǎng)站的速度,現(xiàn)在已被LiveJournal、hatena、Facebook、Vox、LiveJournal等公司所使用。

4.2 Memcached工作方式分析

許多Web應(yīng)用都將數(shù)據(jù)保存到 RDBMS中,應(yīng)用服務(wù)器從中讀取數(shù)據(jù)并在瀏覽器中顯示。 但隨著數(shù)據(jù)量的增大、訪問(wèn)的集中,就會(huì)出現(xiàn)RDBMS的負(fù)擔(dān)加重、數(shù)據(jù)庫(kù)響應(yīng)惡化、 網(wǎng)站顯示延遲等重大影響。Memcached是高性能的分布式內(nèi)存緩存服務(wù)器,通過(guò)緩存數(shù)據(jù)庫(kù)查詢結(jié)果,減少數(shù)據(jù)庫(kù)訪問(wèn)次數(shù),以提高動(dòng)態(tài)Web等應(yīng)用的速度、 提高可擴(kuò)展性。下圖展示了memcache與數(shù)據(jù)庫(kù)端協(xié)同工作情況:

redis、memcache原理對(duì)比

其中的過(guò)程是這樣的:

1.檢查用戶請(qǐng)求的數(shù)據(jù)是緩存中是否有存在,如果有存在的話,只需要直接把請(qǐng)求的數(shù)據(jù)返回,無(wú)需查詢數(shù)據(jù)庫(kù)。

2.如果請(qǐng)求的數(shù)據(jù)在緩存中找不到,這時(shí)候再去查詢數(shù)據(jù)庫(kù)。返回請(qǐng)求數(shù)據(jù)的同時(shí),把數(shù)據(jù)存儲(chǔ)到緩存中一份。

3.保持緩存的“新鮮性”,每當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候(比如,數(shù)據(jù)有被修改,或被刪除的情況下),要同步的更新緩存信息,確保用戶不會(huì)在緩存取到舊的數(shù)據(jù)。

Memcached作為高速運(yùn)行的分布式緩存服務(wù)器,具有以下的特點(diǎn):

協(xié)議簡(jiǎn)單

基于libevent的事件處理

內(nèi)置內(nèi)存存儲(chǔ)方式

memcached不互相通信的分布式

4.3 如何實(shí)現(xiàn)分布式可拓展性?

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

redis、memcache原理對(duì)比

4.4 Redis 介紹

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

4.5 Redis 工作方式分析

Redis作為一個(gè)高性能的key-value數(shù)據(jù)庫(kù)具有以下特征:

多樣的數(shù)據(jù)模型

持久化

主從同步

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

4.6 Redis如何實(shí)現(xiàn)分布式可拓展性?

2.8以前的版本:與Memcached一致,可以在客戶端實(shí)現(xiàn),也可以使用代理,twitter已開(kāi)發(fā)出用于Redis和Memcached的代理Twemproxy 。

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

redis、memcache原理對(duì)比

五、綜合結(jié)論

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

1.性能上:

性能上都很出色,具體到細(xì)節(jié),由于Redis只使用單核,而Memcached可以使用多核,所以平均每一個(gè)核上Redis在存儲(chǔ)小數(shù)據(jù)時(shí)比

Memcached性能更高。而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis,雖然Redis最近也在存儲(chǔ)大數(shù)據(jù)的性能上進(jìn)行優(yōu)化,但是比起 Memcached,還是稍有遜色。

2.內(nèi)存空間和數(shù)據(jù)量大小:

MemCached可以修改最大內(nèi)存,采用LRU算法。Redis增加了VM的特性,突破了物理內(nèi)存的限制。

3.操作便利上:

MemCached數(shù)據(jù)結(jié)構(gòu)單一,僅用來(lái)緩存數(shù)據(jù),而Redis支持更加豐富的數(shù)據(jù)類(lèi)型,也可以在服務(wù)器端直接對(duì)數(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í)也會(huì)付出性能的代價(jià)。

5.應(yīng)用場(chǎng)景:

Memcached:動(dòng)態(tài)系統(tǒng)中減輕數(shù)據(jù)庫(kù)負(fù)載,提升性能;做緩存,適合多讀少寫(xiě),大數(shù)據(jù)量的情況(如人人網(wǎng)大量查詢用戶信息、好友信息、文章信息等)。

Redis:適用于對(duì)讀寫(xiě)效率要求都很高,數(shù)據(jù)處理業(yè)務(wù)復(fù)雜和對(duì)安全性要求較高的系統(tǒng)(如新浪微博的計(jì)數(shù)和微博發(fā)布部分系統(tǒng),對(duì)數(shù)據(jù)安全性、讀寫(xiě)要求都很高)。

六、需要慎重考慮的部分

1.Memcached單個(gè)key-value大小有限,一個(gè)value最大只支持1MB,而Redis最大支持512MB

2.Memcached只是個(gè)內(nèi)存緩存,對(duì)可靠性無(wú)要求;而Redis更傾向于內(nèi)存數(shù)據(jù)庫(kù),因此對(duì)對(duì)可靠性方面要求比較高

3.從本質(zhì)上講,Memcached只是一個(gè)單一key-value內(nèi)存Cache;而Redis則是一個(gè)數(shù)據(jù)結(jié)構(gòu)內(nèi)存數(shù)據(jù)庫(kù),支持五種數(shù)據(jù)類(lèi)型,因此Redis除單純緩存作用外,還可以處理一些簡(jiǎn)單的邏輯運(yùn)算,Redis不僅可以緩存,而且還可以作為數(shù)據(jù)庫(kù)用

4.新版本(3.0)的Redis是指集群分布式,也就是說(shuō)集群本身均衡客戶端請(qǐng)求,各個(gè)節(jié)點(diǎn)可以交流,可拓展行、可維護(hù)性更強(qiáng)大。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    376

    瀏覽量

    10898
  • memcache
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    2482
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    云服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 Redis 集群

    Redis 集群是一種分布式的 Redis 解決方案,能夠在多個(gè)節(jié)點(diǎn)之間分片存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)水平擴(kuò)展和高可用性。與傳統(tǒng)的主從架構(gòu)不同,Redis 集群支持?jǐn)?shù)據(jù)自動(dòng)分片、主節(jié)點(diǎn)故障自動(dòng)切換,并可以在多臺(tái)
    的頭像 發(fā)表于 01-13 13:37 ?68次閱讀
    云服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 <b class='flag-5'>Redis</b> 集群

    華為云Flexus X實(shí)例,Redis性能加速評(píng)測(cè)及對(duì)比

    加速 Redis 的選項(xiàng)。本文旨在通過(guò)實(shí)際測(cè)試,展示華為云 Flexus X 實(shí)例在加速 Redis 方面的性能優(yōu)勢(shì),并與其他業(yè)界 U1 實(shí)例進(jìn)行對(duì)比。
    的頭像 發(fā)表于 12-29 15:47 ?190次閱讀
    華為云Flexus X實(shí)例,<b class='flag-5'>Redis</b>性能加速評(píng)測(cè)及<b class='flag-5'>對(duì)比</b>

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),它們主要用于提高應(yīng)用程序的性能,通過(guò)減少對(duì)數(shù)據(jù)庫(kù)的直接訪問(wèn)來(lái)加速數(shù)據(jù)檢索。以下是對(duì)Redis和Memcached的比較,涵蓋了它們的一些
    的頭像 發(fā)表于 12-18 09:33 ?182次閱讀

    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis 集群

    前言 Redis 是在開(kāi)發(fā)過(guò)程中經(jīng)常用到的緩存中間件,為了考慮在生產(chǎn)環(huán)境中穩(wěn)定性和高可用,Redis通常采用集群模式的部署方式。 在制定Redis集群的部署策略時(shí),常規(guī)部署在虛擬機(jī)上的方式配置繁瑣
    的頭像 發(fā)表于 07-03 15:30 ?808次閱讀
    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 <b class='flag-5'>Redis</b> 集群

    Redis 開(kāi)源協(xié)議調(diào)整,我們?cè)趺崔k?

    2 024 年 3 月 20 日, Redis 官方宣布,從 Redis 7.4 版本開(kāi)始,Redis 將獲得源可用許可證 ( RSALv2 ) 和服務(wù)器端公共許可證 ( SSPLv1 ) 的雙重
    的頭像 發(fā)表于 05-09 22:59 ?453次閱讀
    <b class='flag-5'>Redis</b> 開(kāi)源協(xié)議調(diào)整,我們?cè)趺崔k?

    Redis 開(kāi)源社區(qū)持續(xù)壯大,華為云為 Valkey 項(xiàng)目注入新的活力

    華為云云原生中間件產(chǎn)品團(tuán)隊(duì)在過(guò)去的幾年里,通過(guò)向 Redis 開(kāi)源社區(qū)提交代碼優(yōu)化、性能改進(jìn)和安全性增強(qiáng)的建議,以及積極參與社區(qū)討論和貢獻(xiàn)文檔,為 Redis 的發(fā)展做出了積極的貢獻(xiàn)。作為
    的頭像 發(fā)表于 05-09 22:59 ?762次閱讀
    <b class='flag-5'>Redis</b> 開(kāi)源社區(qū)持續(xù)壯大,華為云為 Valkey 項(xiàng)目注入新的活力

    Redis為什么這么快?

    Redis 是基于內(nèi)存的數(shù)據(jù)庫(kù),那不可避免的就要與磁盤(pán)數(shù)據(jù)庫(kù)做對(duì)比。對(duì)于磁盤(pán)數(shù)據(jù)庫(kù)來(lái)說(shuō),是需要將數(shù)據(jù)讀取到內(nèi)存里的,這個(gè)過(guò)程會(huì)受到磁盤(pán) I/O 的限制。而對(duì)于內(nèi)存數(shù)據(jù)庫(kù)來(lái)說(shuō),本身數(shù)據(jù)就存在于內(nèi)存里,也就沒(méi)有了這方面的開(kāi)銷(xiāo)。
    發(fā)表于 04-12 10:32 ?226次閱讀
    <b class='flag-5'>Redis</b>為什么這么快?

    Redis開(kāi)源版與Redis企業(yè)版,怎么選用?

    點(diǎn)擊“藍(lán)字”關(guān)注我們數(shù)以千計(jì)的企業(yè)和數(shù)以百萬(wàn)計(jì)的開(kāi)發(fā)人員Redis開(kāi)源版來(lái)構(gòu)建應(yīng)用程序。但隨著用戶數(shù)量、數(shù)據(jù)量和地區(qū)性的增加,成本、可擴(kuò)展性、運(yùn)營(yíng)和可用性等問(wèn)題也隨之而來(lái)。Redis企業(yè)版
    的頭像 發(fā)表于 04-04 08:04 ?1153次閱讀
    <b class='flag-5'>Redis</b>開(kāi)源版與<b class='flag-5'>Redis</b>企業(yè)版,怎么選用?

    數(shù)據(jù)安全沒(méi)保障?GaussDB(for Redis) 為你保駕護(hù)航

    近日,一些用戶反饋,使用的開(kāi)源 Redis 中新增了幾個(gè)未知來(lái)源的 Key。通過(guò)分析發(fā)現(xiàn),用戶使用的開(kāi)源 Redis 沒(méi)有設(shè)置密碼,很可能是遭到了 Redis 擴(kuò)散病毒的攻擊,表面上只是新增了幾個(gè)
    的頭像 發(fā)表于 03-28 22:09 ?694次閱讀
    數(shù)據(jù)安全沒(méi)保障?GaussDB(for <b class='flag-5'>Redis</b>) 為你保駕護(hù)航

    GaussDB(for Redis) 特性揭秘:多租戶管理

    華為云 GaussDB(for Redis)持續(xù)完善企業(yè)級(jí)增強(qiáng)特性,是名副其實(shí)的 "Redis Plus" ,其中很經(jīng)典的企業(yè)級(jí)特性是 多租戶能力 ,支持添加只讀賬號(hào)、讀寫(xiě)賬號(hào),且具備強(qiáng)大的 DB
    的頭像 發(fā)表于 03-28 22:06 ?767次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:多租戶管理

    GaussDB(for Redis) 特性揭秘:大 key 治理

    ? 從 DBA 的視角看,大 Key 無(wú)疑是引起 Redis 線上問(wèn)題的常見(jiàn)原因。為了解決大 Key 隱患,業(yè)務(wù)首先要遵守合理的開(kāi)發(fā)規(guī)范,減少大 Key 的產(chǎn)生和訪問(wèn)依賴。但有時(shí)大 Key 是在程序
    的頭像 發(fā)表于 03-28 22:06 ?684次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:大 key 治理

    GaussDB(for Redis) 游戲?qū)嵺`:玩家下線行為上報(bào)

    為保護(hù)未成年人的身心健康,2007 年國(guó)家推出網(wǎng)絡(luò)游戲防沉迷系統(tǒng),對(duì)未成年人的游戲時(shí)間進(jìn)行限制,游戲廠家需要及時(shí)感知用戶的下線時(shí)間并上報(bào)。Redis 是游戲數(shù)據(jù)庫(kù)重要選型之一,在基于開(kāi)源 Redis
    的頭像 發(fā)表于 03-28 22:03 ?542次閱讀

    新版 Redis 不再“開(kāi)源”,對(duì)使用者都有哪些影響?

    2024 年 3 月 20 日,Redis Labs 宣布從 Redis 7.4 開(kāi)始,將原先比較寬松的 BSD 源碼使用協(xié)議修改為 RSAv2和 SSPLv1協(xié)議。該變化意味著 Redis
    的頭像 發(fā)表于 03-27 22:30 ?524次閱讀
    新版 <b class='flag-5'>Redis</b> 不再“開(kāi)源”,對(duì)使用者都有哪些影響?

    Redis官方搜索引擎來(lái)了,性能炸裂!

    RediSearch 是一個(gè) Redis 模塊,為 Redis 提供查詢、二級(jí)索引和全文搜索功能。
    的頭像 發(fā)表于 02-21 10:01 ?2436次閱讀
    <b class='flag-5'>Redis</b>官方搜索引擎來(lái)了,性能炸裂!

    MongoDB和Redis的技術(shù)特性

    Redis作為一個(gè)高性能的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),能夠提供快速的緩存機(jī)制,從而幫助應(yīng)用承受高并發(fā)請(qǐng)求,顯著提高系統(tǒng)響應(yīng)速度和吞吐量。這與國(guó)內(nèi)互聯(lián)網(wǎng)公司推崇的快速迭代和高用戶并發(fā)量的特點(diǎn)非常契合。
    的頭像 發(fā)表于 02-01 11:42 ?532次閱讀
    MongoDB和<b class='flag-5'>Redis</b>的技術(shù)特性