Redis持久化 過(guò)期機(jī)制 淘汰策略

概述

  1. RDB是基于定時(shí)更新生成內(nèi)存快照的方式持久化碍沐,快照里存儲(chǔ)的所有數(shù)據(jù)的最終態(tài)的數(shù)據(jù),比如 age:30
  2. AOF是基于狀態(tài)機(jī)+命令日志+日志壓縮的方式實(shí)現(xiàn)持久化(類似于Zookeeper狀態(tài)機(jī)機(jī)制)政敢,日志里面存儲(chǔ)的是過(guò)程態(tài)的操作日志乏奥,比如 操作1 age:10 谱煤,操作2 age:20,操作3 age:30
  3. 用戶可以關(guān)閉Redis持久化的功能嘉抓,也可以AOF索守、 RDB一起使用(restart時(shí)會(huì)根據(jù)AOF重建內(nèi)存狀態(tài))

AOF更適合精準(zhǔn)、海量數(shù)據(jù):數(shù)據(jù)完整性要求嚴(yán)格抑片、大數(shù)據(jù)存儲(chǔ)量卵佛、人工可追溯的業(yè)務(wù)場(chǎng)景
RDB更適合運(yùn)維方便:節(jié)省硬盤(pán)空間、更方便數(shù)據(jù)備份和恢復(fù)

rdb 定時(shí)快照持久化

  1. 優(yōu)點(diǎn):
  • 定時(shí)生成一個(gè)高度壓縮的二進(jìn)制文件敞斋,容易備份和恢復(fù)
  • 相比于AOF機(jī)制截汪,如果數(shù)據(jù)集很大,RDB的啟動(dòng)效率會(huì)更高,因?yàn)榭煺沾鎯?chǔ)的是一個(gè)最終態(tài)的數(shù)據(jù)植捎,而不是過(guò)程態(tài)的數(shù)據(jù)
  1. 缺點(diǎn):
  • 數(shù)據(jù)不是百分百安全衙解,未持久化的數(shù)據(jù)可能會(huì)丟失
  • 當(dāng)內(nèi)存中的數(shù)據(jù)特別大的時(shí)候,因?yàn)槊看味际巧梢粋€(gè)完整的快照文件焰枢,速度會(huì)很慢蚓峦,而AOF只有在日志壓縮的時(shí)候才會(huì)面臨這個(gè)問(wèn)題
  1. 工作原理
  • 將Reids在內(nèi)存中的數(shù)據(jù)庫(kù)記錄定時(shí) dump到磁盤(pán)上的RDB持久化,
  • 正常退出會(huì)執(zhí)行一次生成快照济锄,但是kill進(jìn)程的方式則不會(huì)觸發(fā)退出時(shí)生成快照
    實(shí)際操作過(guò)程是fork一個(gè)子進(jìn)程暑椰,先將數(shù)據(jù)集寫(xiě)入臨時(shí)文件,寫(xiě)入成功后荐绝,再替換之前的文件一汽,用二進(jìn)制壓縮存儲(chǔ)。
  • save 900 1 #在900秒(15分鐘)之后很泊,如果至少有1個(gè)key發(fā)生變化角虫,則dump內(nèi)存快照。
  • save 300 10 #在300秒(5分鐘)之后委造,如果至少有10個(gè)key發(fā)生變化戳鹅,則dump內(nèi)存快照。
  • save 60 10000 #在60秒(1分鐘)之后昏兆,如果至少有10000個(gè)key發(fā)生變化枫虏,則dump內(nèi)存快照。
  1. RDB配置
    redis.conf (記得啟動(dòng)的時(shí)候要指定這個(gè)配置文件 windows 下 ./redis-server.exe redis.conf)
# 設(shè)置10秒內(nèi)如果改動(dòng)達(dá)到3個(gè)就生成一個(gè)快照
save 10 3

rdbcompression yes
rdbchecksum yes

# 設(shè)置二進(jìn)制快照的名字
dbfilename dumpTest.rdb

# 設(shè)置快照文件的路徑
dir ./

AOF(append only file)

內(nèi)部機(jī)制類似于zab:狀態(tài)機(jī)+命令日志的形式

以日志的形式記錄服務(wù)器所處理的每一個(gè)寫(xiě)、刪除操作隶债,查詢操作不會(huì)記錄腾它,以文本的方式記錄,可以打開(kāi)文件看到詳細(xì)的操作記錄死讹。

  • appendfsync always #每次有數(shù)據(jù)修改發(fā)生時(shí)都會(huì)寫(xiě)入AOF文件瞒滴。
  • appendfsync everysec #每秒鐘同步一次,該策略為AOF的缺省策略赞警。
  • appendfsync no #從不同步妓忍。高效但是數(shù)據(jù)不會(huì)被持久化
  1. 具體配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync always

#配置當(dāng) AOF 文件需要比舊 AOF 文件增大多少時(shí)才進(jìn)行 AOF 重寫(xiě),默認(rèn)和舊AOF文本大小
auto-aof-rewrite-percentage 100

#當(dāng) AOF 文件需要達(dá)到多大體積時(shí)才進(jìn)行 AOF 重寫(xiě)
auto-aof-rewrite-min-size 64mb
  1. 優(yōu)點(diǎn):
  • AOF包含一個(gè)格式清晰愧旦、易于理解的日志文件用于記錄所有的修改操作世剖。事實(shí)上,我們也可以通過(guò)該文件完成數(shù)據(jù)的重建笤虫,而RDB是二進(jìn)制文件
  • 數(shù)據(jù)集文件過(guò)大會(huì)自動(dòng)啟用rewrite機(jī)制旁瘫。即Redis以append模式不斷的將修改數(shù)據(jù)寫(xiě)入到老的磁盤(pán)文件中,同時(shí)Redis還會(huì)創(chuàng) 建一個(gè)新的文件用于記錄此期間有哪些修改命令被執(zhí)行琼蚯。因此在進(jìn)行rewrite切換時(shí)可以更好的保證數(shù)據(jù)安全性
  • AOF 文件的格式可讀性較強(qiáng)酬凳,這也為使用者提供了更靈活的處理方式。例如凌停,如果我們不小心錯(cuò)用了 FLUSHALL 命令粱年,在重寫(xiě)還沒(méi)進(jìn)行時(shí),我們可以手工將最后的 FLUSHALL 命令去掉罚拟,然后再使用 AOF 來(lái)恢復(fù)數(shù)據(jù)
  1. 缺點(diǎn)
  • 大存儲(chǔ)數(shù)據(jù)的時(shí)候重啟的時(shí)候台诗,加載速度比RDB要慢,但是因?yàn)槭亲芳犹砑尤罩荆淮嬖谏纱罂煺盏目D的情況出現(xiàn)
  • 相對(duì)于RDB的方式赐俗,相同的數(shù)據(jù)量AOF占用的空間更大
  1. 重寫(xiě)機(jī)制
  • aof里存放了所有的redis 操作指令拉队,當(dāng)aof文件達(dá)到一定條件或者手動(dòng)bgrewriteaof命令都可以觸發(fā)rewrite
  • rewrite之后aof文件會(huì)保存keys的最后的狀態(tài),清除掉之前冗余的阻逮,來(lái)縮小這個(gè)文件
  • 重寫(xiě)時(shí)機(jī):兩個(gè)幾乎都滿足的時(shí)候才出發(fā)粱快,比如最開(kāi)始size為1kb,到了2kb不觸發(fā)叔扼,至于到了64mb的時(shí)候才觸發(fā)第一次

Expire過(guò)期機(jī)制

刪除過(guò)期鍵對(duì)象事哭,由于內(nèi)存中保存了大量的鍵,維護(hù)鍵精準(zhǔn)的過(guò)期刪除機(jī)制會(huì)導(dǎo)致消耗大量的CPU瓜富,對(duì)于單線程的Redis來(lái)說(shuō)成本過(guò)高鳍咱,因此,Redis采用惰性刪除和定時(shí)任務(wù)刪除機(jī)制來(lái)實(shí)現(xiàn)過(guò)期鍵的內(nèi)存回收与柑。

  1. 惰性刪除:惰性刪除用于當(dāng)client端讀取到帶有超時(shí)屬性的鍵時(shí)谤辜,如果已經(jīng)超過(guò)鍵設(shè)置的過(guò)期時(shí)間蓄坏,會(huì)執(zhí)行刪除操作并返回空,該策略是出于節(jié)省CPU成本考慮丑念,不需要單獨(dú)維護(hù)TTL鏈表來(lái)處理過(guò)期鍵的刪除涡戳。該方式存在內(nèi)存泄漏的可能,當(dāng)過(guò)期鍵一直沒(méi)有訪問(wèn)將無(wú)法得到及時(shí)刪除脯倚,從而導(dǎo)致內(nèi)存不能及時(shí)釋放渔彰。

  2. 定時(shí)任務(wù)刪除:Redis內(nèi)部維護(hù)一個(gè)定時(shí)任務(wù),默認(rèn)每秒運(yùn)行10次推正,定時(shí)任務(wù)中刪除過(guò)期鍵邏輯采用了自適應(yīng)算法胳岂,根據(jù)鍵的過(guò)期比例,使用快慢兩種速率模式回收鍵舔稀。

內(nèi)存溢出策略

當(dāng)Redis所用內(nèi)存達(dá)到maxmemory上限時(shí)會(huì)觸發(fā)相應(yīng)的溢出控制策略,策略由maxmemory-policy參數(shù)控制掌测,可以通過(guò)config set maxmemory-policy {policy} 動(dòng)態(tài)設(shè)置内贮。
LRU就是 least Recent Use,根據(jù)最近最少使用的

  1. noeviction:默認(rèn)策略汞斧,不會(huì)刪除任何數(shù)據(jù)夜郁,拒絕所有寫(xiě)入操作并返回client端OOM錯(cuò)誤信息,此時(shí)Redis只響應(yīng)讀操作粘勒;

  2. allkeys-lru:根據(jù)LRU算法刪除鍵竞端,不管數(shù)據(jù)有沒(méi)有設(shè)置超時(shí)時(shí)間,直到釋放足夠的內(nèi)存空間為止庙睡;

  3. allkeys-random:隨機(jī)刪除所有鍵事富,直到釋放足夠的內(nèi)存空間為止;

  4. volatile-lru:根據(jù)LRU算法刪除設(shè)置了超時(shí)屬性的鍵乘陪,直到釋放足夠空間為止统台,如果沒(méi)有可刪除的鍵對(duì)象,回退到noeviction策略啡邑;

  5. volatile-random:隨機(jī)刪除過(guò)期鍵贱勃,直到釋放足夠的內(nèi)存空間為止;

  6. volatile-ttl:根據(jù)鍵對(duì)象的ttl屬性谤逼,刪除最近將要過(guò)期的數(shù)據(jù)贵扰,如果沒(méi)有,回退到noeviction策略

參考

官網(wǎng)講的很詳細(xì)了
https://redis.io/topics/persistence#snapshotting

https://blog.csdn.net/guweiyu_thinker/article/details/78816071

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末流部,一起剝皮案震驚了整個(gè)濱河市戚绕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贵涵,老刑警劉巖列肢,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恰画,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瓷马,警方通過(guò)查閱死者的電腦和手機(jī)拴还,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)欧聘,“玉大人片林,你說(shuō)我怎么就攤上這事』持瑁” “怎么了费封?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蒋伦。 經(jīng)常有香客問(wèn)我弓摘,道長(zhǎng),這世上最難降的妖魔是什么痕届? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任韧献,我火速辦了婚禮,結(jié)果婚禮上研叫,老公的妹妹穿的比我還像新娘锤窑。我一直安慰自己,他們只是感情好嚷炉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布渊啰。 她就那樣靜靜地躺著,像睡著了一般申屹。 火紅的嫁衣襯著肌膚如雪绘证。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天独柑,我揣著相機(jī)與錄音迈窟,去河邊找鬼。 笑死忌栅,一個(gè)胖子當(dāng)著我的面吹牛车酣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播索绪,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼湖员,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瑞驱?” 一聲冷哼從身側(cè)響起娘摔,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唤反,沒(méi)想到半個(gè)月后凳寺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鸭津,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年肠缨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逆趋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晒奕,死狀恐怖闻书,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脑慧,我是刑警寧澤魄眉,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站闷袒,受9級(jí)特大地震影響坑律,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜囊骤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一脾歇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淘捡,春花似錦、人聲如沸池摧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)作彤。三九已至膘魄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竭讳,已是汗流浹背创葡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绢慢,地道東北人灿渴。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胰舆,于是被迫代替她去往敵國(guó)和親骚露。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 企業(yè)級(jí)redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用缚窿,持久化是不可減少的棘幸,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,198評(píng)論 0 7
  • 從這篇文章開(kāi)始,將依次介紹Redis高可用相關(guān)的知識(shí)——持久化倦零、復(fù)制(及讀寫(xiě)分離)误续、哨兵吨悍、以及集群。 本文將先說(shuō)明...
    不變甄心閱讀 692評(píng)論 0 4
  • 前言 在上一篇文章中蹋嵌,介紹了Redis內(nèi)存模型育瓜,從這篇文章開(kāi)始,將依次介紹Redis高可用相關(guān)的知識(shí)——持久化欣尼、復(fù)...
    Java架構(gòu)閱讀 2,304評(píng)論 3 21
  • 一爆雹、Redis高可用概述 在介紹Redis高可用之前,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義愕鼓。 我們知道钙态,在w...
    空語(yǔ)閱讀 1,594評(píng)論 0 2
  • 作者:莊錦昆 怨秋聲 寶蟾深庭清秋鎖 桂香難斷 多情更在百丈外 恨不得見(jiàn) 咫尺天涯滿淚漣 雷峰重塔千層壓 訇然終塌...
    知識(shí)e站閱讀 351評(píng)論 0 2