Memcache & Redis & Tair

一、前言

非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL = Not Only SQL)的產(chǎn)品非常多,常見(jiàn)的有Memcached、Redis、MongoDB等優(yōu)秀開(kāi)源項(xiàng)目,相關(guān)概念和資料網(wǎng)上也非常豐富,不再重復(fù)描述.

Memcache:

1. ?Memcache 只支持簡(jiǎn)單的k/v結(jié)構(gòu)的數(shù)據(jù)。

2. ?Memcache不支持枚舉,不支持持久化和復(fù)制等功能

3.Memcache是多線程的,在多核上能線性擴(kuò)展到每秒處理100,000個(gè)請(qǐng)求

4.Memcache提供了cas命令,可以保證多個(gè)并發(fā)訪問(wèn)操作同一份數(shù)據(jù)的一致性問(wèn)題

5. ? ?Memcache 的數(shù)據(jù)都存儲(chǔ) 內(nèi)存中 所以它根本不會(huì)有磁盤(pán)I/O操作。

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

新的數(shù)據(jù)也可能會(huì)被剔除,原因可以參考:http://timyang.NET/data/Memcached-lru-evictions/

Redis:

1.Redis支持多種類型數(shù)據(jù) k/v ?,list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ) 還提供了KEYS。

2. ??Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份

3. ??Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用

4. ??Redis并不是所有的數(shù)據(jù)都一直存儲(chǔ)在內(nèi)存中的,Redis只會(huì)緩存所有的 key的信息,如果Redis發(fā)現(xiàn)內(nèi)存的使用量超過(guò)了某一個(gè)閥值,將觸發(fā)swap的操作,Redis根據(jù)“swappability = age*log(size_in_memory)”計(jì) 算出哪些key對(duì)應(yīng)的value需要swap到磁盤(pán)。然后再將這些key對(duì)應(yīng)的value持久化到磁盤(pán)中,同時(shí)在內(nèi)存中清除.

5. ??從Redis中讀取數(shù)據(jù)的時(shí)候,如果讀取的key對(duì)應(yīng)的value不在內(nèi)存中,那么Redis就需要從swap文件中加載相應(yīng)數(shù)據(jù),然后再返回給請(qǐng)求方。

6. ?Redis提供了事務(wù)的功能,可以保證一串 命令的原子性,中間不會(huì)被任何操作打斷

7. ?Redis使用現(xiàn)場(chǎng)申請(qǐng)內(nèi)存的方式來(lái)存儲(chǔ)數(shù)據(jù),并且很少使用free-list等方式來(lái)優(yōu)化內(nèi)存分配,會(huì)在一定程度上存在內(nèi)存碎片,Redis跟據(jù)存儲(chǔ)命令參數(shù),會(huì)把帶過(guò)期時(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。

8. ?Redis除了作為存儲(chǔ)之外還提供了一些其它方面的功能,比如聚合計(jì)算、pubsub(消息,發(fā)布者和監(jiān)聽(tīng)者)、scripting等。

總結(jié):

1.Redis使用最佳方式是全部數(shù)據(jù)in-memory。

2.Redis更多場(chǎng)景是作為Memcached的替代者來(lái)使用。

3.當(dāng)需要除key/value之外的更多數(shù)據(jù)類型支持時(shí),使用Redis更合適。

4.當(dāng)存儲(chǔ)的數(shù)據(jù)不能被剔除時(shí),使用Redis更合適。

Tair :

1.tair 基于redis

2.一個(gè)Tair集群主要包括3個(gè)必選模塊:configserver、dataserver和client,一個(gè)可選模塊:invalidserver。通常情況下,一個(gè)集群中包含2臺(tái)configserver及多臺(tái)dataServer。

兩臺(tái)configserver互為主備并通過(guò)維護(hù)和dataserver之間的心跳獲知集群中存活可用的dataserver,構(gòu)建數(shù)據(jù)在集群中的分布信息(對(duì)照表)。dataserver負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),并按照configserver的指示完成數(shù)據(jù)的復(fù)制和遷移工作

3.支持redis的內(nèi)存存儲(chǔ)結(jié)構(gòu)。支持k/v,list,hash,set等數(shù)據(jù)結(jié)構(gòu)

ConfigServer的功能

1)?通過(guò)維護(hù)和dataserver心跳來(lái)獲知集群中存活節(jié)點(diǎn)的信息

2)?根據(jù)存活節(jié)點(diǎn)的信息來(lái)構(gòu)建數(shù)據(jù)在集群中的分布表。

3)?提供數(shù)據(jù)分布表的查詢服務(wù)。

4)?調(diào)度dataserver之間的數(shù)據(jù)遷移、復(fù)制。

1.1.2?DataServer的功能

1)?提供存儲(chǔ)引擎

2)?接受client的put/get/remove等操作

3)?執(zhí)行數(shù)據(jù)遷移,復(fù)制等

4)?插件:在接受請(qǐng)求的時(shí)候處理一些自定義功能

5)?訪問(wèn)統(tǒng)計(jì)

1.1.3?InvalidServer的功能

1)?接收來(lái)自client的invalid/hide等請(qǐng)求后,對(duì)屬于同一組的集群(雙機(jī)房獨(dú)立集群部署方式)做delete/hide操作,保證同一組集群的一致。

2)?集群斷網(wǎng)之后的,臟數(shù)據(jù)清理。

3)?訪問(wèn)統(tǒng)計(jì)。

1.1.4?client的功能

1)?在應(yīng)用端提供訪問(wèn)Tair集群的接口。

2)?更新并緩存數(shù)據(jù)分布表和invalidserver地址等。

3)?LocalCache,避免過(guò)熱數(shù)據(jù)訪問(wèn)影響tair集群服務(wù)。

4)?流控

2.1.1?Tair緩存使用的場(chǎng)景

1.?數(shù)據(jù)可以以key/value的形式存儲(chǔ)

2.?數(shù)據(jù)可以接受丟失

3.?訪問(wèn)速度要求很高

4.?單個(gè)數(shù)據(jù)大小不是很大,一般在KB級(jí)別

5.?數(shù)據(jù)量很大,并且有較大的增長(zhǎng)可能性

6.?數(shù)據(jù)更新不頻繁

2.1.2?Tair持久化適用的場(chǎng)景

1.?數(shù)據(jù)可以以key/value的形式存儲(chǔ)

2.?數(shù)據(jù)需要持久化

3.?數(shù)據(jù)量很大,并且有較大的增長(zhǎng)可能性

4.?單個(gè)數(shù)據(jù)大小不是很大,一般在KB級(jí)別

5.?數(shù)據(jù)的讀寫(xiě)比例較高

2.2?不適Tair用的場(chǎng)景

1.對(duì)數(shù)據(jù)有查詢需求,比如對(duì)key的模糊查詢,或者根據(jù)value反查詢key等

2.單條數(shù)據(jù)很大

3.讀寫(xiě)比例很低

5.1?tair優(yōu)勢(shì)

a.在分布式集群支持方面tair支持副本,支持多種集群結(jié)構(gòu),如:一機(jī)房一個(gè)集群、雙?????機(jī)房單集群?jiǎn)畏荨㈦p機(jī)房獨(dú)立集群、雙機(jī)房單集群雙份、雙機(jī)房主備集群;

b.對(duì)于讀寫(xiě)性能根據(jù)結(jié)點(diǎn)添加對(duì)線性上升,原因是各個(gè)結(jié)點(diǎn)之間是沒(méi)有關(guān)系,節(jié)點(diǎn)增多相應(yīng)性能提升。

c.高可用比較強(qiáng),任何小于副本數(shù)結(jié)點(diǎn)掛掉,不會(huì)影響正常業(yè)務(wù)。

e.淘寶在多個(gè)實(shí)際應(yīng)用場(chǎng)景應(yīng)用,滿足不同業(yè)務(wù)需求。

F.支持跨機(jī)房數(shù)據(jù)分布。

5.2?tair弱勢(shì)

a.在單節(jié)點(diǎn)的性能比較方面,redis是性能比tair高大概1/5

b.redis目前研究人員比較少,社區(qū)不是很活躍。

5.3?redis優(yōu)勢(shì)

a.在單節(jié)點(diǎn)的性能比較方面,redis是性能比tair高大概1/5

b.redis目前研究人員比較多,社區(qū)比較活躍。

c.在支持多種數(shù)據(jù)結(jié)構(gòu)方面tair沒(méi)有redis支持的全面。

5.4?redis弱勢(shì)

a.目前發(fā)布版不支持分布式,測(cè)試版支持,測(cè)試版對(duì)分布式支持比較弱,是用主備支持高可能,沒(méi)有副本。

b.容災(zāi)性相比tair弱,原因是redis的分布式不支持多副本。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評(píng)論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,520評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,362評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,805評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,541評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,896評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,062評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,608評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,356評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,555評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,769評(píng)論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,175評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,489評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,289評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,516評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載地址:http://gnucto.blog.51cto.com/3391516/998509 Redis與Me...
    Ddaidai閱讀 21,462評(píng)論 0 82
  • 1、memcache的概念? Memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨...
    桖辶殤閱讀 2,260評(píng)論 2 12
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴(kuò)展、高可用、大數(shù)據(jù)存儲(chǔ)問(wèn)題而產(chǎn)生的數(shù)據(jù)庫(kù)解決方...
    克魯?shù)吕?/span>閱讀 5,336評(píng)論 0 36
  • Redis的內(nèi)存優(yōu)化 聲明:本文內(nèi)容來(lái)自《Redis開(kāi)發(fā)與運(yùn)維》一書(shū)第八章,如轉(zhuǎn)載請(qǐng)聲明。 Redis所有的數(shù)據(jù)都...
    meng_philip123閱讀 18,923評(píng)論 2 29
  • 昨天的夜里,我恍惚著 仿佛確是遇見(jiàn)你了 在額濟(jì)納齊河的左岸 ...
    茶桑閱讀 440評(píng)論 6 5