Redis緩存分析:大Key分析

業(yè)務(wù)節(jié)點(diǎn)將緩存 or 持久化數(shù)據(jù)寫入Redis之后,在多數(shù)DBA or DBA DevOps的工作場景中骂删,不可避免的要涉及Redis緩存分析,其主要包含大Key熱key的分析。

基于redis-cli的bigkeys分析

redis-cli -h ${HowUger_redis_addr} -p ${HowUger_redis_port} -a ${HowUger_redis_auth} --bigkeys

# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest zset   found so far 'testzset' with 129 members
[00.00%] Biggest hash   found so far 'h2' with 513 fields
[00.00%] Biggest set    found so far 'si1' with 5 members
[00.00%] Biggest hash   found so far 'h4' with 514 fields
[00.00%] Biggest string found so far 'key' with 9 bytes
-------- summary -------
Sampled 9 keys in the keyspace!
Total key length in bytes is 27 (avg len 3.00)
Biggest string found 'key' has 9 bytes
Biggest    set found 'si1' has 5 members
Biggest   hash found 'h4' has 514 fields
Biggest   zset found 'testzset' has 129 members
1 strings with 9 bytes (11.11% of keys, avg size 9.00)
0 lists with 0 items (00.00% of keys, avg size 0.00)
2 sets with 8 members (22.22% of keys, avg size 4.00)
4 hashs with 1541 fields (44.44% of keys, avg size 385.25)
2 zsets with 132 members (22.22% of keys, avg size 66.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)

簡單總結(jié)下:

  1. Bigkeys實(shí)際是使用scan方式對Redis中所有key進(jìn)行掃描統(tǒng)計(jì)魔市,因此無需擔(dān)心其對Redis造成阻塞休讳。
  2. Bigkeys主要應(yīng)用于統(tǒng)計(jì)以string為主要存儲類型的key分析場景讲婚。
  3. Bigkeys對于list,set,zset和hash等其他Redis數(shù)據(jù)類型的統(tǒng)計(jì)是以元素個(gè)數(shù)作為衡量標(biāo)準(zhǔn)的,可以說對于非string類型key的統(tǒng)計(jì)bigkeys的結(jié)論是模糊且沒有意義的俊柔。

基于debug object key的序列化分析

HowUger_redis:orz> hmset myhash k1 v1 k2 v2 k3 v3
OK
HowUger_redis:orz> debug object myhash
Value at:0x7f005c6920a0 refcount:1 encoding:ziplist serializedlength:36 lru:3341677 lru_seconds_idle:2

debug object key基本輸出說明如下:

  • Value at:key的內(nèi)存地址
  • refcount:引用次數(shù)
  • encoding:編碼類型
  • serializedlength:序列化長度
  • lru_seconds_idle:空閑時(shí)間

官方不建議在客戶端使用debug object key命令筹麸,原話是這樣?jì)饍旱危?/p>

DEBUG OBJECT is a debugging command that should not be used by clients.

說幾個(gè)問題:

  1. serializedlength是key序列化后的長度活合,并不是key在內(nèi)存中的真正長度。就像一個(gè)數(shù)組在json_encode后的長度與其在內(nèi)存中的真正長度并不相同物赶。
  2. serializedlength會對string做一些可能的壓縮白指。如果有些string的壓縮比特別高,那么在比較時(shí)就會出事情
  3. 計(jì)算serializedlength的代價(jià)相對高酵紫,少嘗試告嘲,慎用別開玩笑。(多數(shù)云供應(yīng)商的DCS服務(wù)會直接禁用客戶端調(diào)用debug object命令哦)

基于rdbtools的rdb文件分析

rdb -c memory /tmp/HowUger_redis_dump.rdb

database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
0,hash,data:index_flow_yingshi,10492,hashtable,1,8992,2019-01-14T08:20:10.236000
0,hash,data:index_movie,22068,hashtable,7,2896,2019-01-14T07:29:19.685000
0,string,block:index_module_novel,8296,string,7694,7694,2019-01-13T00:27:46.128000
0,string,block:index_bottom_baike_aikan,8296,string,7632,7632,2019-01-14T02:27:11.850000
0,string,block:index_bottom_tools,5224,string,4549,4549,2019-01-13T01:02:09.171000
0,string,block:index_module_travel,7272,string,6408,6408,2019-01-13T00:43:39.478000
...

總結(jié)說明:

  1. python2.4以上版本
  2. git倉
  3. 基于離線數(shù)據(jù)rdb文件
  4. 包含但不僅限于rdb奖地,還有redis-memory-for-key橄唬,RdbParser等待
  5. 加分依賴包python-lzf
  6. rdb文件分析、生成json或csv格式報(bào)告参歹、單key內(nèi)存分析仰楚、rdb解析器等等,更多具體功能看git吧犬庇。
  7. 通過分析rdb文件中的key及value僧界,反算出該kv在內(nèi)存中的大小。計(jì)算時(shí)考慮了數(shù)據(jù)類型的影響臭挽,key本身長度的影響捂襟,內(nèi)存分配等多種因素。雖然得出的大小不是真實(shí)值埋哟,但用于key大小的統(tǒng)計(jì)已經(jīng)是完全足夠了笆豁。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赤赊,隨后出現(xiàn)的幾起案子闯狱,更是在濱河造成了極大的恐慌,老刑警劉巖抛计,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哄孤,死亡現(xiàn)場離奇詭異,居然都是意外死亡吹截,警方通過查閱死者的電腦和手機(jī)瘦陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來波俄,“玉大人晨逝,你說我怎么就攤上這事∨称蹋” “怎么了捉貌?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我趁窃,道長牧挣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任醒陆,我火速辦了婚禮瀑构,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刨摩。我一直安慰自己寺晌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布澡刹。 她就那樣靜靜地躺著折剃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪像屋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天边篮,我揣著相機(jī)與錄音己莺,去河邊找鬼。 笑死戈轿,一個(gè)胖子當(dāng)著我的面吹牛凌受,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播思杯,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胜蛉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了色乾?” 一聲冷哼從身側(cè)響起誊册,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎暖璧,沒想到半個(gè)月后案怯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澎办,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年嘲碱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片局蚀。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡麦锯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出琅绅,到底是詐尸還是另有隱情扶欣,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站宵蛀,受9級特大地震影響昆著,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜术陶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一凑懂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梧宫,春花似錦接谨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忌卤,卻和暖如春扫夜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驰徊。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工笤闯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棍厂。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓颗味,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牺弹。 傳聞我的和親對象是個(gè)殘疾皇子浦马,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

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