Redis的大key問題

一. 什么是大key遵湖?

通常指數(shù)據(jù)內(nèi)存使用量非常大的數(shù)據(jù),比如set里放了相當多的數(shù)據(jù)

ps:比如我們用set存儲了單個用戶的文章點贊數(shù)據(jù)粘昨,有個小伙伴天天無聊就在那給文章點贊疗认,點了幾百萬蜓氨,那set里就有了幾百萬數(shù)據(jù)只搁,這個可能就是一個大key

  • 備注:大key操作通常可見于集群慢日志妖滔,同期會伴隨緩存調(diào)用的高延遲隧哮,甚至節(jié)點完全阻塞造成的不可用。

  • 參考:根據(jù)測試結(jié)果座舍,value在超過1KB后性能開始下降沮翔,超過10KB后性能下降明顯,出現(xiàn)拐點曲秉。

二. 數(shù)據(jù)層面的解釋--避免大key操作

業(yè)務(wù)方應(yīng)盡量避免進行大key操作采蚀,如 hgetall 一次獲取非常大的hash數(shù)據(jù),用 hmset 一次設(shè)置非常多的value承二,用 lrange 一次取一個非常大的 list 或非常多的元素榆鼠,如果客戶端需要用到這些操作對應(yīng)的API,一次操作的返回結(jié)果大小必須是在合理可控的范圍內(nèi)亥鸠,防止導(dǎo)致節(jié)點通信超時妆够、網(wǎng)絡(luò)堵塞等嚴重后果。

三. 結(jié)構(gòu)層面的大key問題解釋

  • 1.資源使用不均(該大key可能會使用該實例相當多的內(nèi)存负蚊,浪費相當大的Cpu神妹,)
  • 2.帶寬使用極大(比如假如我們有個功能展示上面例子中點贊的所有文章,一下查出來全部盖桥,肯定會使用非常大的帶寬)
  • 3.影響該實例其他key的操作(基于redis的單線程處理機制灾螃,大家都在排隊,前面的慢揩徊,自然影響其他數(shù)據(jù)的操作)

四. 大key如何發(fā)現(xiàn)腰鬼?

  • bigkeys命令
    bigkeys命令以遍歷的方式分析Redis實例中的所有Key,并返回整體統(tǒng)計信息與每個數(shù)據(jù)類型中Top1的大Key
  • redis-rdb-tools
    使用redis-rdb-tools離線分析工具來掃描RDB持久化文件塑荒,雖然實時性略差熄赡,但是完全離線對性能無影響
  • Redis 4.0 以后的版本:支持 了 memory 命令查看 key 的大小
    預(yù)估值齿税,不太準確(采用的是多次抽樣分析彼硫,預(yù)估全部數(shù)據(jù)的量)

五. 如何解決大key問題?

  • 1.數(shù)據(jù)結(jié)構(gòu)拆分凌箕,比如我們這里有個活動數(shù)據(jù)拧篮,活動有活動商品數(shù)據(jù),這倆就進行了拆分牵舱,并沒有放一起
  • 2.數(shù)據(jù)分片串绩,比如后面加序號,進行多實例的拆分

六. 大key的刪除問題

6.1 Redis 4.0以前大key刪除

4.0 以前 string芜壁,list礁凡,set高氮,hash 不同數(shù)據(jù)類型的大 key,刪除方式有所不同顷牌。一般有兩種情況:del 命令刪除單個很大的 key 和 del 批量刪除 大 key剪芍。直接 del 命令粗暴的刪大 key 容易造成 redis 線程阻塞。4.0 以前要優(yōu)雅的刪除就是針對不同的類型 寫腳本窟蓝,拆分鏈表罪裹,hash 表,分批刪除疗锐。

6.2 Redis 4.0 以后優(yōu)雅的刪除大 key

  • 主動刪除 UNLINK xxxkey
    unlink 命令是 del 的異步版本坊谁,由 Lazyfree 機制實現(xiàn)。Lazyfree 機制的原理是在刪除的時候只進行邏輯刪除滑臊,把 key 釋放操作放在 bio (Background I/O)單獨的子線程中惰性處理口芍,減少刪除大 key 對 redis 主線程的阻塞,有效地避免因刪除大key帶來的性能問題雇卷。unlink 即使在批量刪除 大 key 時鬓椭,也不會對阻塞造成阻塞。
  • 被動刪除
    被動刪除是指 Redis 自身的 key 清除策略关划,一個 大 key 過期或者被淘汰時小染,如何被清除,會不會導(dǎo)致阻塞贮折?4.0 以前自動清除是有可能阻塞主線程的裤翩。
    4.0 以后的版本,被動刪除策略是可選的配置參數(shù)调榄,允許以 Lazyfree 的方式清除踊赠。但是參數(shù)默認是關(guān)閉的,可配置如下參數(shù)開啟每庆。
    lazyfree-lazy-expire on # 過期惰性刪除
    lazyfree-lazy-eviction on # 超過最大內(nèi)存惰性刪除
    lazyfree-lazy-server-del on # 服務(wù)端被動惰性刪除
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筐带,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缤灵,更是在濱河造成了極大的恐慌伦籍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腮出,死亡現(xiàn)場離奇詭異帖鸦,居然都是意外死亡,警方通過查閱死者的電腦和手機胚嘲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門富蓄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慢逾,你說我怎么就攤上這事立倍。” “怎么了侣滩?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵口注,是天一觀的道長。 經(jīng)常有香客問我君珠,道長寝志,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任策添,我火速辦了婚禮材部,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唯竹。我一直安慰自己乐导,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布浸颓。 她就那樣靜靜地躺著物臂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪产上。 梳的紋絲不亂的頭發(fā)上棵磷,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音晋涣,去河邊找鬼仪媒。 笑死,一個胖子當著我的面吹牛谢鹊,可吹牛的內(nèi)容都是我干的算吩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撇贺,長吁一口氣:“原來是場噩夢啊……” “哼赌莺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起松嘶,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艘狭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翠订,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巢音,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年尽超,在試婚紗的時候發(fā)現(xiàn)自己被綠了官撼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡似谁,死狀恐怖傲绣,靈堂內(nèi)的尸體忽然破棺而出掠哥,到底是詐尸還是另有隱情,我是刑警寧澤秃诵,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布续搀,位于F島的核電站,受9級特大地震影響菠净,放射性物質(zhì)發(fā)生泄漏禁舷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一毅往、第九天 我趴在偏房一處隱蔽的房頂上張望牵咙。 院中可真熱鬧,春花似錦攀唯、人聲如沸洁桌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽战坤。三九已至,卻和暖如春残拐,著一層夾襖步出監(jiān)牢的瞬間途茫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工溪食, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囊卜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓错沃,卻偏偏與公主長得像栅组,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子枢析,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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