Redis變慢了秸妥,你會(huì)怎么排查(三)

集中過(guò)期

有時(shí)你會(huì)發(fā)現(xiàn)滚停,平時(shí)在使用Redis時(shí)沒(méi)有延時(shí)比較大的情況,但在某個(gè)時(shí)間點(diǎn)突然出現(xiàn)一波延時(shí)粥惧,而且報(bào)慢的時(shí)間點(diǎn)很有規(guī)律键畴,例如某個(gè)整點(diǎn),或者間隔多久就會(huì)發(fā)生一次影晓。

如果出現(xiàn)這種情況镰吵,就需要考慮是否存在大量key集中過(guò)期的情況檩禾。

如果有大量的key在某個(gè)固定時(shí)間點(diǎn)集中過(guò)期挂签,在這個(gè)時(shí)間點(diǎn)訪問(wèn)Redis時(shí),就有可能導(dǎo)致延遲增加盼产。

Redis的過(guò)期策略采用主動(dòng)過(guò)期+懶惰過(guò)期兩種策略:

  • 主動(dòng)過(guò)期:Redis內(nèi)部維護(hù)一個(gè)定時(shí)任務(wù)饵婆,默認(rèn)每隔100毫秒會(huì)從過(guò)期字典中隨機(jī)取出20個(gè)key,刪除過(guò)期的key戏售,如果過(guò)期key的比例超過(guò)了25%侨核,則繼續(xù)獲取20個(gè)key,刪除過(guò)期的key灌灾,循環(huán)往復(fù)搓译,直到過(guò)期key的比例下降到25%或者這次任務(wù)的執(zhí)行耗時(shí)超過(guò)了25毫秒,才會(huì)退出循環(huán)
  • 懶惰過(guò)期:只有當(dāng)訪問(wèn)某個(gè)key時(shí)锋喜,才判斷這個(gè)key是否已過(guò)期些己,如果已經(jīng)過(guò)期,則從實(shí)例中刪除

注意嘿般,Redis的主動(dòng)過(guò)期的定時(shí)任務(wù)段标,也是在Redis主線程中執(zhí)行的 ,也就是說(shuō)如果在執(zhí)行主動(dòng)過(guò)期的過(guò)程中炉奴,出現(xiàn)了需要大量刪除過(guò)期key的情況逼庞,那么在業(yè)務(wù)訪問(wèn)時(shí),必須等這個(gè)過(guò)期任務(wù)執(zhí)行結(jié)束瞻赶,才可以處理業(yè)務(wù)請(qǐng)求赛糟。此時(shí)就會(huì)出現(xiàn),業(yè)務(wù)訪問(wèn)延時(shí)增大的問(wèn)題砸逊,最大延遲為25毫秒璧南。

而且這個(gè)訪問(wèn)延遲的情況,不會(huì)記錄在慢日志里痹兜。慢日志中只記錄真正執(zhí)行某個(gè)命令的耗時(shí)穆咐,Redis主動(dòng)過(guò)期策略執(zhí)行在操作命令之前,如果操作命令耗時(shí)達(dá)不到慢日志閾值,它是不會(huì)計(jì)算在慢日志統(tǒng)計(jì)中的对湃,但我們的業(yè)務(wù)卻感到了延遲增大崖叫。

此時(shí)你需要檢查你的業(yè)務(wù),是否真的存在集中過(guò)期的代碼拍柒,一般集中過(guò)期使用的命令是expireat或pexpireat命令心傀,在代碼中搜索這個(gè)關(guān)鍵字就可以了。

如果你的業(yè)務(wù)確實(shí)需要集中過(guò)期掉某些key拆讯,又不想導(dǎo)致Redis發(fā)生抖動(dòng)脂男,有什么優(yōu)化方案?

解決方案是种呐,在集中過(guò)期時(shí)增加一個(gè)隨機(jī)時(shí)間宰翅,把這些需要過(guò)期的key的時(shí)間打散即可。
偽代碼可以這么寫:

# 在過(guò)期時(shí)間點(diǎn)之后的5分鐘內(nèi)隨機(jī)過(guò)期掉
redis.expireat(key, expire_time + random(300))

這樣Redis在處理過(guò)期時(shí)爽室,不會(huì)因?yàn)榧袆h除key導(dǎo)致壓力過(guò)大汁讼,阻塞主線程。

另外阔墩,除了業(yè)務(wù)使用需要注意此問(wèn)題之外嘿架,還可以通過(guò)運(yùn)維手段來(lái)及時(shí)發(fā)現(xiàn)這種情況。

做法是我們需要把Redis的各項(xiàng)運(yùn)行數(shù)據(jù)監(jiān)控起來(lái)啸箫,執(zhí)行info可以拿到所有的運(yùn)行數(shù)據(jù)耸彪,在這里我們需要重點(diǎn)關(guān)注expired_keys這一項(xiàng),它代表整個(gè)實(shí)例到目前為止忘苛,累計(jì)刪除過(guò)期key的數(shù)量蝉娜。

我們需要對(duì)這個(gè)指標(biāo)監(jiān)控,當(dāng)在很短時(shí)間內(nèi)這個(gè)指標(biāo)出現(xiàn)突增時(shí)柑土,需要及時(shí)報(bào)警出來(lái)蜀肘,然后與業(yè)務(wù)報(bào)慢的時(shí)間點(diǎn)對(duì)比分析,確認(rèn)時(shí)間是否一致稽屏,如果一致扮宠,則可以認(rèn)為確實(shí)是因?yàn)檫@個(gè)原因?qū)е碌难舆t增大。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狐榔,一起剝皮案震驚了整個(gè)濱河市坛增,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薄腻,老刑警劉巖收捣,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異庵楷,居然都是意外死亡罢艾,警方通過(guò)查閱死者的電腦和手機(jī)楣颠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咐蚯,“玉大人童漩,你說(shuō)我怎么就攤上這事〈悍妫” “怎么了矫膨?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)期奔。 經(jīng)常有香客問(wèn)我侧馅,道長(zhǎng),這世上最難降的妖魔是什么呐萌? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任馁痴,我火速辦了婚禮,結(jié)果婚禮上搁胆,老公的妹妹穿的比我還像新娘弥搞。我一直安慰自己,他們只是感情好渠旁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著船逮,像睡著了一般顾腊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挖胃,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天杂靶,我揣著相機(jī)與錄音,去河邊找鬼酱鸭。 笑死吗垮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凹髓。 我是一名探鬼主播烁登,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔚舀!你這毒婦竟也來(lái)了饵沧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赌躺,失蹤者是張志新(化名)和其女友劉穎狼牺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礼患,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡是钥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年掠归,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悄泥。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拂到,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出码泞,到底是詐尸還是另有隱情兄旬,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布余寥,位于F島的核電站领铐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宋舷。R本人自食惡果不足惜绪撵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祝蝠。 院中可真熱鬧音诈,春花似錦、人聲如沸绎狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)儡嘶。三九已至喇聊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹦狂,已是汗流浹背誓篱。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凯楔,地道東北人窜骄。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像摆屯,于是被迫代替她去往敵國(guó)和親邻遏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355