《分布式_Redis》_概述匯總

redis 匯總一下弃理。

五種數(shù)據(jù)類(lèi)型 基本了解 (略)

5.0特性 (沒(méi)搞 stream client可創(chuàng)建集群,不用ruby了 略)

scan 類(lèi)似分頁(yè)

image.png

集群高可用(下篇)

客戶端使用 jedis( 官方推薦https://github.com/xetorthio/jedis 略)

image.png

核心原理

Redis 單線程為什么還能這么快?
因?yàn)樗械臄?shù)據(jù)都在內(nèi)存中,所有的運(yùn)算都是內(nèi)存級(jí)別的運(yùn)算,而且單線程避免了多線程的切換性能損耗問(wèn)題遇绞。正因?yàn)?Redis 是單線程,所以要小心使用 Redis 指令燎窘,對(duì)于那些耗時(shí)的指令(比如keys)摹闽,一定要謹(jǐn)慎使用,一不小心就可能會(huì)導(dǎo)致 Redis 卡頓褐健。
Redis 單線程如何處理那么多的并發(fā)客戶端連接付鹿?
Redis的IO多路復(fù)用:redis利用epoll來(lái)實(shí)現(xiàn)IO多路復(fù)用,將連接信息和事件放到隊(duì)列中蚜迅,依次放到文件事件分派器舵匾,事件分派器將事件分發(fā)給事件處理器。
Nginx也是采用IO多路復(fù)用原理解決C10K問(wèn)題 NIO及Netty 共享線程

持久化

RDB快照(snapshot)

在默認(rèn)情況下谁不, Redis 將內(nèi)存數(shù)據(jù)庫(kù)快照保存在名字為 dump.rdb 的二進(jìn)制文件中坐梯。

你可以對(duì) Redis 進(jìn)行設(shè)置, 讓它在“ N 秒內(nèi)數(shù)據(jù)集至少有 M 個(gè)改動(dòng)”這一條件被滿足時(shí)刹帕, 自動(dòng)保存一次數(shù)據(jù)集吵血。

比如說(shuō), 以下設(shè)置會(huì)讓 Redis 在滿足“ 60 秒內(nèi)有至少有 1000 個(gè)鍵被改動(dòng)”這一條件時(shí)轩拨, 自動(dòng)保存一次數(shù)據(jù)集:

save 60 1000

AOF(append-only file)

快照功能并不是非常耐久(durable): 如果 Redis 因?yàn)槟承┰蚨斐晒收贤C(jī)践瓷, 那么服務(wù)器將丟失最近寫(xiě)入、且仍未保存到快照中的那些數(shù)據(jù)亡蓉。從 1.1 版本開(kāi)始, Redis 增加了一種完全耐久的持久化方式: AOF 持久化喷舀,將修改的每一條指令記錄進(jìn)文件

你可以通過(guò)修改配置文件來(lái)打開(kāi) AOF 功能:

 appendonly yes

從現(xiàn)在開(kāi)始砍濒, 每當(dāng) Redis 執(zhí)行一個(gè)改變數(shù)據(jù)集的命令時(shí)(比如 [SET](http://redisdoc.com/string/set.html%23set)), 這個(gè)命令就會(huì)被追加到 AOF 文件的末尾硫麻。

這樣的話爸邢, 當(dāng) Redis 重新啟時(shí), 程序就可以通過(guò)重新執(zhí)行 AOF 文件中的命令來(lái)達(dá)到重建數(shù)據(jù)集的目的拿愧。

你可以配置 Redis 多久才將數(shù)據(jù) fsync 到磁盤(pán)一次杠河。

有三個(gè)選項(xiàng):

1. 每次有新命令追加到 AOF 文件時(shí)就執(zhí)行一次 fsync :非常慢,也非常安全。

2. 每秒 fsync 一次:足夠快(和使用 RDB 持久化差不多)券敌,并且在故障時(shí)只會(huì)丟失 1 秒鐘的數(shù)據(jù)唾戚。

3. 從不 fsync :將數(shù)據(jù)交給操作系統(tǒng)來(lái)處理。更快待诅,也更不安全的選擇叹坦。

推薦(并且也是默認(rèn))的措施為每秒 fsync 一次, 這種 fsync 策略可以兼顧速度和安全性卑雁。

RDB 和 AOF 募书,我應(yīng)該用哪一個(gè)?

如果你非常關(guān)心你的數(shù)據(jù)测蹲, 但仍然可以承受數(shù)分鐘以內(nèi)的數(shù)據(jù)丟失莹捡, 那么你可以只使用 RDB 持久化。

有很多用戶都只使用 AOF 持久化扣甲, 但我們并不推薦這種方式: 因?yàn)槎〞r(shí)生成 RDB 快照(snapshot)非常便于進(jìn)行數(shù)據(jù)庫(kù)備份篮赢, 并且 RDB 恢復(fù)數(shù)據(jù)集的速度也要比 AOF 恢復(fù)的速度要快。

Redis 4.0 `混合持久化`

重啟 Redis 時(shí)文捶,我們很少使用 rdb 來(lái)恢復(fù)內(nèi)存狀態(tài)荷逞,因?yàn)闀?huì)丟失大量數(shù)據(jù)。我們通常使用 AOF 日志重放粹排,但是重放 AOF 日志性能相對(duì) rdb 來(lái)說(shuō)要慢很多种远,這樣在 Redis 實(shí)例很大的情況下,啟動(dòng)需要花費(fèi)很長(zhǎng)的時(shí)間顽耳。 Redis 4.0 為了解決這個(gè)問(wèn)題坠敷,帶來(lái)了一個(gè)新的持久化選項(xiàng)——混合持久化。AOF在重寫(xiě)(aof文件里可能有太多沒(méi)用指令射富,所以aof會(huì)定期根據(jù)內(nèi)存的最新數(shù)據(jù)生成aof文件)時(shí)將重寫(xiě)這一刻之前的內(nèi)存rdb快照文件的內(nèi)容和增量的 AOF修改內(nèi)存數(shù)據(jù)的命令日志文件存在一起膝迎,都寫(xiě)入新的aof文件,新的文件一開(kāi)始不叫appendonly.aof胰耗,等到重寫(xiě)完新的AOF文件才會(huì)進(jìn)行改名限次,原子的覆蓋原有的AOF文件,完成新舊兩個(gè)AOF文件的替換柴灯; 

AOF根據(jù)配置規(guī)則在后臺(tái)自動(dòng)重寫(xiě)卖漫,也可以人為執(zhí)行命令bgrewriteaof重寫(xiě)AOF。 于是在 Redis 重啟的時(shí)候赠群,可以先加載 rdb 的內(nèi)容羊始,然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放,重啟效率因此大幅得到提升查描。

開(kāi)啟混合持久化:

aof-use-rdb-preamble yes

緩存淘汰策略

當(dāng) Redis 內(nèi)存超出物理內(nèi)存限制時(shí)突委,內(nèi)存的數(shù)據(jù)會(huì)開(kāi)始和磁盤(pán)產(chǎn)生頻繁的交換 (swap)柏卤。交換會(huì)讓 Redis 的性能急劇下降,對(duì)于訪問(wèn)量比較頻繁的 Redis 來(lái)說(shuō)匀油,這樣龜速的存取效率基本上等于不可用缘缚。
在生產(chǎn)環(huán)境中我們是不允許 Redis 出現(xiàn)交換行為的,為了限制最大使用內(nèi)存钧唐,Redis 提供了配置參數(shù) maxmemory 來(lái)限制內(nèi)存超出期望大小忙灼。 
當(dāng)實(shí)際內(nèi)存超出 maxmemory 時(shí),Redis 提供了幾種可選策略 (maxmemory-policy) 來(lái)讓用戶自己決定該如何騰出新的空間以繼續(xù)提供讀寫(xiě)服務(wù)钝侠。
noeviction 不會(huì)繼續(xù)服務(wù)寫(xiě)請(qǐng)求 (DEL 請(qǐng)求可以繼續(xù)服務(wù))该园,讀請(qǐng)求可以繼續(xù)進(jìn)行。這樣可以保證不會(huì)丟失數(shù)據(jù)帅韧,但是會(huì)讓線上的業(yè)務(wù)不能持續(xù)進(jìn)行里初。這是默認(rèn)的淘汰策略。
volatile-lru 嘗試淘汰設(shè)置了過(guò)期時(shí)間的 key忽舟,最少使用的 key 優(yōu)先被淘汰双妨。沒(méi)有設(shè)置過(guò)期時(shí)間的 key 不會(huì)被淘汰,這樣可以保證需要持久化的數(shù)據(jù)不會(huì)突然丟失叮阅。
volatile-ttl 跟上面一樣刁品,除了淘汰的策略不是 LRU,而是 key 的剩余壽命 ttl 的值浩姥,ttl 越小越優(yōu)先被淘汰挑随。
volatile-random 跟上面一樣,不過(guò)淘汰的 key 是過(guò)期 key 集合中隨機(jī)的 key勒叠。
allkeys-lru 區(qū)別于 volatile-lru兜挨,這個(gè)策略要淘汰的 key 對(duì)象是全體的 key 集合,而不只是過(guò)期的 key 集合眯分。這意味著沒(méi)有設(shè)置過(guò)期時(shí)間的 key 也會(huì)被淘汰拌汇。
allkeys-random 跟上面一樣,不過(guò)淘汰的策略是隨機(jī)的 key弊决。
volatile-xxx 策略只會(huì)針對(duì)帶過(guò)期時(shí)間的 key 進(jìn)行淘汰噪舀,allkeys-xxx 策略會(huì)對(duì)所有的 key 進(jìn)行淘汰。如果你只是拿 Redis 做緩存飘诗,那應(yīng)該使用 allkeys-xxx傅联,客戶端寫(xiě)緩存時(shí)不必?cái)y帶過(guò)期時(shí)間。如果你還想同時(shí)使用 Redis 的持久化功能疚察,那就使用 volatile-xxx 策略,這樣可以保留沒(méi)有設(shè)置過(guò)期時(shí)間的 key仇奶,它們是永久的 key 不會(huì)被 LRU 算法淘汰貌嫡。

總結(jié)

梳理

參考

官網(wǎng):https://redis.io/
GitHub:https://github.com/xetorthio/jedis

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末比驻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岛抄,更是在濱河造成了極大的恐慌别惦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夫椭,死亡現(xiàn)場(chǎng)離奇詭異掸掸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蹭秋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)扰付,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人仁讨,你說(shuō)我怎么就攤上這事羽莺。” “怎么了洞豁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵盐固,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我丈挟,道長(zhǎng)刁卜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任曙咽,我火速辦了婚禮蛔趴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桐绒。我一直安慰自己夺脾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布茉继。 她就那樣靜靜地躺著咧叭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烁竭。 梳的紋絲不亂的頭發(fā)上菲茬,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音派撕,去河邊找鬼婉弹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛终吼,可吹牛的內(nèi)容都是我干的镀赌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼际跪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼商佛!你這毒婦竟也來(lái)了喉钢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤良姆,失蹤者是張志新(化名)和其女友劉穎肠虽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玛追,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡税课,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痊剖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韩玩。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邢笙,靈堂內(nèi)的尸體忽然破棺而出啸如,到底是詐尸還是另有隱情,我是刑警寧澤氮惯,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布叮雳,位于F島的核電站,受9級(jí)特大地震影響妇汗,放射性物質(zhì)發(fā)生泄漏帘不。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一杨箭、第九天 我趴在偏房一處隱蔽的房頂上張望寞焙。 院中可真熱鬧,春花似錦互婿、人聲如沸捣郊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呛牲。三九已至,卻和暖如春驮配,著一層夾襖步出監(jiān)牢的瞬間娘扩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工壮锻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琐旁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓猜绣,卻偏偏與公主長(zhǎng)得像灰殴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掰邢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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