redis知識結構

基礎

特性:速度快/基于kv結構/功能穩(wěn)定/持久化/高可用

基本類型:字符串/列表/hash/集合/有序集合

速度快原因:單線程/基于內存的操作/epollo模型

memcached對比:1.支持更多數(shù)據(jù)類型2.數(shù)據(jù)持久化3.文件大小限制 redis 512G4.redis單進程mc多進程

遍歷:keys 遍歷所有 scan漸進式遍歷

3種移動key的方式 move,dump/restore,migrate

擴展應用

lua

通過eval和evalsha(加載到服務端執(zhí)行)執(zhí)行l(wèi)ua腳本

好處:1.lua腳本在redis是原子操作不插入其他命令2.可以擴展redis功能3.多條命令打包減少開銷

pipeline

1.批量執(zhí)行2.非原子性3.只能操作一個實例4.使用時避免過大堵塞

事務

1.使用multi和exec執(zhí)行事務2.命令是原子順序執(zhí)行3.事務不支持回滾

持久化

AOF

使用日志記錄每次的命令靶衍,重啟后再執(zhí)行AOF中的命令恢復數(shù)據(jù),解決數(shù)據(jù)持久化的實時性。使用文本協(xié)議保存董瞻。也可以手動和自動觸發(fā)命令暂吉。redis啟動時優(yōu)先判斷AOF文件是否存在

重寫文件變幸靖啊:1.過期數(shù)據(jù)不再寫入2.去除無效命令只保存最終結果3.多條命令合并成一個

RDB

定義:把當前進程數(shù)據(jù)生成快照保存到硬盤诡延,可以手動和自動觸發(fā)鉴象。bgsave(子進程方式)非阻塞 save阻塞忙菠。

優(yōu)點:1.緊湊二進制文件,適合備份 2.加載RDB速度比AOF快

缺點:1.不能做到實時/秒級持久化2.新老版本格式不一致不容易兼容

內存管理

回收策略(刪除過期時間的鍵)

惰性刪除:過期對象被使用時才刪除纺弊,可能存在內存泄露

定時任務掃描:每秒運行10次牛欢,使用快慢兩種方式回收鍵

內存溢出控制:1.拒絕寫入2.最近最少使用3.隨機刪除所有鍵等

使用優(yōu)化:1.縮減key和value的大小 2.使用共享對象池(LRU相關淘汰策略無效,只支持整數(shù)對象池)3.避免頻繁操作減少碎片

碎片產生的原因:頻繁append setrang等

高可用

主從復制

配置從節(jié)點同步數(shù)據(jù)淆游,支持樹狀結構復制傍睹。

主從節(jié)點維護心跳和偏移量監(jiān)測保證通訊和數(shù)據(jù)一致

哨兵

能夠實現(xiàn)高可用,實現(xiàn)故障發(fā)現(xiàn)稽犁,故障轉移,客戶端通知骚亿。在對節(jié)點做失敗判斷時分為主觀下線和客觀下線(Page:257)已亥。

集群(Redis Cluster)

實現(xiàn)原理:使用哈希分布,一致性哈希通過哈希環(huán)實現(xiàn)来屠。哈希槽0-16383

集群功能限制:1.key批量操作支持有限(mset/mget)虑椎,因為分配到不同的槽中2.事務操作的限制3.不支持多數(shù)據(jù)庫空間 4.復制結構只能一層

緩存設計

更新策略

LRU/LRF/FIFO算法

超時剔除

主動更新

穿透優(yōu)化

緩存空對象震鹉,并設置一定過期時間

布隆過濾器(對有效key的驗證)

雪崩

保持高可用

使用組件限流降級

熱點key優(yōu)化

互斥更新value

不過期

異步更新策略

進階

bigkeys

危害:內存空間不均衡,超時捆姜,網絡堵塞

如何發(fā)現(xiàn):redis_cli --bigkeys,被動收集/scan + debug object主動發(fā)現(xiàn)

惰性刪除:lazy delete free 異步操作传趾,不會堵塞

實現(xiàn)原理

string

raw(動態(tài)字符串編碼)

embstr(優(yōu)化內存分配的字符串編碼)

int(整數(shù)編碼)

hash

hashtable

ziplist(壓縮列表)

list

linkedlist(雙向鏈表)

ziplist(壓縮列表)

quicklist

set

hashtable

intset(整數(shù)集合編碼)

zset

ziplist(壓縮列表)

skiplist(跳躍表)

底層實現(xiàn)

ziplist(壓縮表):https://www.kancloud.cn/kancloud/redisbook/63856

skiplist(跳躍表):字典保存member到score的映射∧嗉迹基于鏈表按照score從小到大排列浆兰,增加跳躍功能,新增加數(shù)據(jù)時候會隨機分層珊豹。跳表保存key用于排序和范圍查找

intset(整數(shù)集合編碼) https://www.kancloud.cn/kancloud/redisbook/63849

阻塞

導致阻塞的原因:數(shù)據(jù)類型使用不合理簸呈,持久化阻塞,cpu飽和店茶,網絡等問題

對應幾個解決方法:慢日志蜕便,關注CPU使用率,禁止不合理使用命令 keys,sort等

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末贩幻,一起剝皮案震驚了整個濱河市轿腺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丛楚,老刑警劉巖族壳,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸯檬,居然都是意外死亡决侈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門喧务,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赖歌,“玉大人,你說我怎么就攤上這事功茴÷耄” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵坎穿,是天一觀的道長展父。 經常有香客問我,道長玲昧,這世上最難降的妖魔是什么栖茉? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮孵延,結果婚禮上吕漂,老公的妹妹穿的比我還像新娘。我一直安慰自己尘应,他們只是感情好惶凝,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布吼虎。 她就那樣靜靜地躺著,像睡著了一般苍鲜。 火紅的嫁衣襯著肌膚如雪思灰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天混滔,我揣著相機與錄音洒疚,去河邊找鬼。 笑死遍坟,一個胖子當著我的面吹牛拳亿,可吹牛的內容都是我干的。 我是一名探鬼主播愿伴,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼肺魁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了隔节?” 一聲冷哼從身側響起鹅经,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怎诫,沒想到半個月后瘾晃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡幻妓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年蹦误,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肉津。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡强胰,死狀恐怖,靈堂內的尸體忽然破棺而出妹沙,到底是詐尸還是另有隱情偶洋,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布距糖,位于F島的核電站玄窝,受9級特大地震影響,放射性物質發(fā)生泄漏悍引。R本人自食惡果不足惜恩脂,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趣斤。 院中可真熱鬧俩块,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镊逝。三九已至壮啊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撑蒜,已是汗流浹背歹啼。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留座菠,地道東北人狸眼。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像浴滴,于是被迫代替她去往敵國和親拓萌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容

  • 一升略、Redis高可用概述 在介紹Redis高可用之前微王,先說明一下在Redis的語境中高可用的含義。 我們知道品嚣,在w...
    空語閱讀 1,598評論 0 2
  • NOSQL類型簡介鍵值對:會使用到一個哈希表炕倘,表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù),如redis翰撑,volde...
    MicoCube閱讀 4,000評論 2 27
  • 1.Redis特性 1)速度快:數(shù)據(jù)存放在內存上罩旋、基于C語言實現(xiàn)、單線程架構預防多線程競爭問題眶诈;2)基于鍵值對的數(shù)...
    Sponge1128閱讀 621評論 0 1
  • 字典(dict) dict字典是基于hash算法來實現(xiàn)涨醋,是Hash數(shù)據(jù)類型的底層存儲數(shù)據(jù)結構。我們來看下redis...
    java菜閱讀 394評論 0 1
  • 企業(yè)級redis集群架構的特點 海量數(shù)據(jù) 高并發(fā) 高可用 要達到高可用册养,持久化是不可減少的东帅,持久化主要是做災難恢復...
    lucode閱讀 2,208評論 0 7