Redis ?和 Memcache 區(qū)別

數(shù)據(jù)結(jié)構(gòu)
Redis支持多種數(shù)據(jù)結(jié)構(gòu),String、Set、List、Hash、SortedSet。
Memcached基本只支持簡單的key-value存儲(chǔ),不支持枚舉,不支持持久化和復(fù)制等功能。

內(nèi)存管理
Memcached使用預(yù)分配的內(nèi)存池的方式,使用slab和大小不同的chunk來管理內(nèi)存,Item根據(jù)大小選擇合適的chunk存儲(chǔ),內(nèi)存池的方式可以省去申請/釋放內(nèi)存的開銷,并且能減小內(nèi)存碎片產(chǎn)生,但這種方式也會(huì)帶來一定程度上的空間浪費(fèi),并且在內(nèi)存仍然有很大空間時(shí),新的數(shù)據(jù)也可能會(huì)被剔除。

Redis使用現(xiàn)場申請內(nèi)存的方式來存儲(chǔ)數(shù)據(jù),并且很少使用free-list等方式來優(yōu)化內(nèi)存分配,會(huì)在一定程度上存在內(nèi)存碎片,Redis跟據(jù)存儲(chǔ)命令參數(shù),會(huì)把帶過期時(shí)間的數(shù)據(jù)單獨(dú)存放在一起,并把它們稱為臨時(shí)數(shù)據(jù),非臨時(shí)數(shù)據(jù)是永遠(yuǎn)不會(huì)被剔除的,即便物理內(nèi)存不夠,導(dǎo)致swap也不會(huì)剔除任何非臨時(shí)數(shù)據(jù)(但會(huì)嘗試剔除部分臨時(shí)數(shù)據(jù)),這點(diǎn)上Redis更適合作為存儲(chǔ)而不是cache。Redis當(dāng)物理內(nèi)存用完時(shí),可以將一些很久沒用到的value 交換到磁盤。

網(wǎng)絡(luò)模型
Redis使用單線程的IO復(fù)用模型,自己封裝了一個(gè)簡單的AeEvent事件處理框架,主要實(shí)現(xiàn)了epoll、kqueue和select,對于單純只有IO操作來說,單線程可以將速度優(yōu)勢發(fā)揮到最大,但是Redis也提供了一些簡單的計(jì)算功能,比如排序、聚合等,對于這些操作,單線程模型實(shí)際會(huì)嚴(yán)重影響整體吞吐量,CPU計(jì)算過程中,整個(gè)IO調(diào)度都是被阻塞住的。

Memcache是多線程,非阻塞IO復(fù)用的網(wǎng)絡(luò)模型,分為監(jiān)聽主線程和worker子線程,監(jiān)聽線程監(jiān)聽網(wǎng)絡(luò)連接,接受請求后,將連接描述字pipe 傳遞給worker線程,進(jìn)行讀寫IO, 網(wǎng)絡(luò)層使用libevent封裝的事件庫,多線程模型可以發(fā)揮多核作用,但是引入了cache coherency和鎖的問題,比如,Memcache最常用的stats 命令,實(shí)際Memcache所有操作都要對這個(gè)全局變量加鎖,進(jìn)行計(jì)數(shù)等工作,帶來了性能損耗。

備份恢復(fù)、持久化、災(zāi)后重建
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份;redis可以定期保存到磁盤(持久化);redis數(shù)據(jù)丟失后可以通過aof/rdb恢復(fù)。
Memcache掛掉后,數(shù)據(jù)不可恢復(fù)。

應(yīng)用場景
Redis出來作為NoSQL數(shù)據(jù)庫使用外,還能用做消息隊(duì)列、數(shù)據(jù)堆棧和數(shù)據(jù)緩存等;
Memcached適合于緩存SQL語句、數(shù)據(jù)集、用戶臨時(shí)性數(shù)據(jù)、延遲查詢數(shù)據(jù)和session等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載地址:http://gnucto.blog.51cto.com/3391516/998509 Redis與Me...
    Ddaidai閱讀 21,548評(píng)論 0 82
  • 分布式緩存技術(shù)PK:選擇Redis還是Memcached? 經(jīng)平臺(tái)同意授權(quán)轉(zhuǎn)載 作者:田京昆(騰訊后臺(tái)研發(fā)工程師)...
    meng_philip123閱讀 69,046評(píng)論 7 60
  • Redis是一個(gè) Key-Value 存儲(chǔ)系統(tǒng)。和 Memcached 類似,它支持存儲(chǔ)的 value 類型相對更...
    vivi_wong閱讀 13,478評(píng)論 2 4
  • 一、MemCache簡介 session MemCache是一個(gè)自由、源碼開放、高性能、分布式的分布式內(nèi)存對象緩存...
    李偉銘MIng閱讀 4,009評(píng)論 2 13
  • 1、memcache的概念? Memcache是一個(gè)高性能的分布式的內(nèi)存對象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨...
    桖辶殤閱讀 2,360評(píng)論 2 12

友情鏈接更多精彩內(nèi)容