Redis分區(qū)

分區(qū)在我的理解就是原本一個(gè)Redis處理所有的get/set請(qǐng)求铡俐,現(xiàn)在用多個(gè)Redis實(shí)例來分擔(dān)get/set 請(qǐng)求捞高。

  • 為什么要使用分區(qū)谣辞?
  • 擴(kuò)容
  • 提升計(jì)算能力宋距,提高帶寬

分區(qū)標(biāo)準(zhǔn)

  • 范圍分區(qū)
    就是將不同范圍的對(duì)象映射到不同Redis實(shí)例变过。比如說埃元,用戶ID從0到10000的都被存儲(chǔ)到R0,用戶ID從10001到20000被存儲(chǔ)到R1,依此類推。
    這是一種可行方案并且很多人已經(jīng)在使用媚狰。但是這種方案也有缺點(diǎn)岛杀,你需要建一張表存儲(chǔ)數(shù)據(jù)到redis實(shí)例的映射關(guān)系。這張表需要非常謹(jǐn)慎地維護(hù)并且需要為每一類對(duì)象建立映射關(guān)系崭孤,所以redis范圍分區(qū)通常并不像你想象的那樣運(yùn)行类嗤,比另外一種分區(qū)方案效率要低很多。
  • Hash分區(qū)
1.  使用散列函數(shù) (如 crc32 )將鍵名稱轉(zhuǎn)換為一個(gè)數(shù)字辨宠。例:鍵foobar, 使用crc32(foobar)函數(shù)將產(chǎn)生散列值93024922遗锣。
2.  對(duì)轉(zhuǎn)換后的散列值進(jìn)行取模,以產(chǎn)生一個(gè)0到3的數(shù)字嗤形,以便可以使這個(gè)key映射到4個(gè)Redis實(shí)例當(dāng)中的一個(gè)精偿。93024922 % 4 等于 2, 所以 foobar 會(huì)被存儲(chǔ)到第2個(gè)Redis實(shí)例。 R2 注意: 對(duì)一個(gè)數(shù)字進(jìn)行取模,在大多數(shù)編程語言中是使用運(yùn)算符%

分區(qū)的實(shí)現(xiàn)方案

  1. 客戶端分區(qū)
    就是由客戶端自己決定要將Key存放在哪個(gè)實(shí)例笔咽,再去哪個(gè)實(shí)例獲取
  2. 代理分區(qū)
    客戶端依賴一個(gè)代理搔预,代理決定去哪個(gè)節(jié)點(diǎn)寫數(shù)據(jù)或者讀數(shù)據(jù)。代理根據(jù)分區(qū)規(guī)則決定請(qǐng)求哪些Redis實(shí)例叶组,然后根據(jù)Redis的響應(yīng)結(jié)果返回給客戶端拯田。redis和memcached的一種代理實(shí)現(xiàn)就是Twemproxy
  3. 查詢路由
    客戶端隨機(jī)地請(qǐng)求任意一個(gè)redis實(shí)例,然后由Redis將請(qǐng)求轉(zhuǎn)發(fā)給正確的Redis節(jié)點(diǎn)

分區(qū)的缺點(diǎn)

  1. 涉及多個(gè)key的操作通常不會(huì)被支持甩十。例如你不能對(duì)兩個(gè)集合求交集船庇,多個(gè)Key的事務(wù)
  2. 備份/恢復(fù) 復(fù)雜化
  3. 分區(qū)使用的粒度是key,zset 功能受到限制
  4. 擴(kuò)容和縮容操作復(fù)雜

用作緩存和持久化分區(qū)的不同

使用途徑不一樣Redis分區(qū)的實(shí)現(xiàn)還是有點(diǎn)不一樣的侣监。當(dāng)把Redis當(dāng)做一個(gè)持久化存儲(chǔ)時(shí)鸭轮,一個(gè)key必須嚴(yán)格地每次被映射到同一個(gè)Redis實(shí)例。當(dāng)把Redis當(dāng)做一個(gè)緩存時(shí)达吞,即使Redis的其中一個(gè)節(jié)點(diǎn)不可用,就算數(shù)據(jù)發(fā)生了丟失张弛,我們還可以去Mysql等數(shù)據(jù)庫(kù)拉取數(shù)據(jù),淡然我們可用任意的規(guī)則更改映射酪劫,提高系統(tǒng)的高可用性吞鸭,比如使用一致性Hash算法,這種方法能夠?qū)崿F(xiàn)當(dāng)一個(gè)key的首選的節(jié)點(diǎn)不可用時(shí)切換至其他節(jié)點(diǎn)覆糟。同樣地刻剥,如果你增加了一個(gè)新節(jié)點(diǎn),立刻就會(huì)有新的key被分配至這個(gè)新節(jié)點(diǎn)滩字。

  • 重要結(jié)論如下:
    1. 如果Redis被當(dāng)做緩存使用造虏,使用一致性哈希實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)容縮容
    2. 如果Redis被當(dāng)做一個(gè)持久化存儲(chǔ)使用麦箍,必須使用固定的keys-to-nodes映射關(guān)系漓藕,節(jié)點(diǎn)的數(shù)量一旦確定不能變化。否則的話(即Redis節(jié)點(diǎn)需要?jiǎng)討B(tài)變化的情況)挟裂,必須使用可以在運(yùn)行時(shí)進(jìn)行數(shù)據(jù)再平衡的一套系統(tǒng)享钞,而當(dāng)前只有Redis集群可以做到這樣 - Redis 集群已經(jīng)可用 2015.4.1.

預(yù)分片

如果我們要將Redis作為持久化,一般情況下隨著時(shí)間的推移诀蓉,數(shù)據(jù)存儲(chǔ)需求總會(huì)發(fā)生變化栗竖。今天可能10個(gè)Redis節(jié)點(diǎn)就夠了,但是明天可能就需要增加到50個(gè)節(jié)點(diǎn)渠啤,這是十分麻煩的狐肢。為防止以后的擴(kuò)容,最好的辦法就是一開始就啟動(dòng)較多實(shí)例沥曹。即便你只有一臺(tái)服務(wù)器份名,你也可以一開始就讓Redis以分布式的方式運(yùn)行碟联,使用分區(qū),在同一臺(tái)服務(wù)器上啟動(dòng)多個(gè)實(shí)例(偽集群)同窘。
一開始就多設(shè)置幾個(gè)Redis實(shí)例玄帕,例如32或者64個(gè)實(shí)例部脚,對(duì)大多數(shù)用戶來說這操作起來可能比較麻煩想邦,但是從長(zhǎng)久來看做這點(diǎn)犧牲是值得的。
這樣的話委刘,當(dāng)你的數(shù)據(jù)不斷增長(zhǎng)丧没,需要更多的Redis服務(wù)器時(shí),你需要做的就是僅僅將Redis實(shí)例從一臺(tái)服務(wù)遷移到另外一臺(tái)服務(wù)器而已(而不用考慮重新分區(qū)的問題)锡移。一旦你添加了另一臺(tái)服務(wù)器呕童,你需要將你一半的Redis實(shí)例從第一臺(tái)機(jī)器遷移到第二臺(tái)機(jī)器。
大概的操作步驟是這樣:

  1. 啟動(dòng)一個(gè)空的實(shí)例new在另外一臺(tái)機(jī)子上淆珊;
  2. new配置為你的的源實(shí)例(要擴(kuò)容的實(shí)例)的從節(jié)點(diǎn)夺饲;
  3. 關(guān)閉客戶端
  4. 更改客戶端的配置(連接到新機(jī)子的Ip)
  5. new設(shè)置為主節(jié)點(diǎn) SLAVEOF NO ONE
  6. 重啟客戶端
  7. 關(guān)閉源實(shí)例

分區(qū)的可選方案

  1. 首選Redis Cluster
  2. 使用推特開源的代理 twemproxy
  3. 使用支持一致性哈希的客戶端
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市施符,隨后出現(xiàn)的幾起案子往声,更是在濱河造成了極大的恐慌,老刑警劉巖戳吝,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浩销,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡听哭,警方通過查閱死者的電腦和手機(jī)慢洋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陆盘,“玉大人普筹,你說我怎么就攤上這事“恚” “怎么了太防?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)祟霍。 經(jīng)常有香客問我杏头,道長(zhǎng),這世上最難降的妖魔是什么沸呐? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任醇王,我火速辦了婚禮,結(jié)果婚禮上崭添,老公的妹妹穿的比我還像新娘寓娩。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布棘伴。 她就那樣靜靜地躺著寞埠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焊夸。 梳的紋絲不亂的頭發(fā)上仁连,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音阱穗,去河邊找鬼饭冬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛揪阶,可吹牛的內(nèi)容都是我干的昌抠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鲁僚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炊苫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冰沙,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤侨艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后倦淀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒋畜,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年撞叽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姻成。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愿棋,死狀恐怖科展,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糠雨,我是刑警寧澤才睹,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站甘邀,受9級(jí)特大地震影響琅攘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜松邪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一坞琴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逗抑,春花似錦剧辐、人聲如沸寒亥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溉奕。三九已至,卻和暖如春忍啤,著一層夾襖步出監(jiān)牢的瞬間加勤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工檀轨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胸竞,地道東北人欺嗤。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓参萄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親煎饼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讹挎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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

  • ****正文****Redis Partitioning即Redis分區(qū),簡(jiǎn)單的說就是將數(shù)據(jù)分布到不同的redis...
    景岳閱讀 63,976評(píng)論 2 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理吆玖,服務(wù)發(fā)現(xiàn)筒溃,斷路器,智...
    卡卡羅2017閱讀 134,665評(píng)論 18 139
  • 分區(qū)是把數(shù)據(jù)分割到多個(gè)Redis實(shí)例的處理過程沾乘,每個(gè)redis實(shí)例只是保存你所有key的一個(gè)子集怜奖。 分區(qū)的優(yōu)勢(shì) 在...
    limx閱讀 1,015評(píng)論 1 0
  • Redis 分區(qū) 分區(qū)是分割數(shù)據(jù)到多個(gè)Redis實(shí)例的處理過程歪玲,因此每個(gè)實(shí)例只保存key的一個(gè)子集。 分區(qū)的優(yōu)勢(shì) ...
    陳小陌丿閱讀 5,562評(píng)論 0 4
  • Redis 分區(qū) 分區(qū)是分割數(shù)據(jù)到多個(gè)Redis實(shí)例的處理過程掷匠,因此每個(gè)實(shí)例只保存key的一個(gè)子集滥崩。 分區(qū)的優(yōu)勢(shì) ...
    stakeing閱讀 250評(píng)論 0 0