- 注意: 撰寫本文目的主要是為了給自己做一個(gè)備忘錄邻寿,如果你學(xué)過Redis并且希望從本文中找到一些忘記的知識(shí)點(diǎn),那么你可以閱讀本文章视哑。由于文章內(nèi)講解并不是很多绣否,因此此文章并不適合小白入門使用。
1.Redis簡(jiǎn)介
-
官網(wǎng)介紹:
在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤挡毅,也就是行話講的Snapshot快照蒜撮,它恢復(fù)時(shí)是將快照文件直接讀到內(nèi)存里。 -
Redis是什么:
Redis會(huì)單獨(dú)創(chuàng)建(fork
)一個(gè)子進(jìn)程來(lái)進(jìn)行持久化跪呈,會(huì)先將數(shù)據(jù)寫入到一個(gè)臨時(shí)文件中段磨,待持久化過程都結(jié)束了,再用這個(gè)臨時(shí)文件替換上次持久化好的文件庆械。整個(gè)過程中薇溃,主進(jìn)程是不進(jìn)行任何IO操作
的,這就確保了極高的性能缭乘。如果需要進(jìn)行大規(guī)模數(shù)據(jù)的恢復(fù)沐序,且對(duì)于數(shù)據(jù)恢復(fù)的完整性不是很敏感,那RDB方式
要比AOP方式
更加的高效堕绩。RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失策幼。 -
Fork:
Fork的作用是復(fù)制一個(gè)與當(dāng)前進(jìn)程一樣的進(jìn)程。新進(jìn)程的所有數(shù)據(jù)(變量奴紧、環(huán)境變量特姐、程序計(jì)數(shù)器)數(shù)值都和原進(jìn)程一致,但是是一個(gè)全新的進(jìn)程黍氮,并作為原進(jìn)程的子進(jìn)程唐含。
2.RDB(Redis DataBase)
RDB存儲(chǔ):
- RDBRedis會(huì)將數(shù)據(jù)存儲(chǔ)在dump.rdb文件中浅浮。
- 如果使用shutdown或者系統(tǒng)突然崩潰或關(guān)機(jī)使得Redis突然停止工作時(shí),Redis會(huì)將此時(shí)表中的數(shù)據(jù)保存至dump.rdb文件中捷枯,執(zhí)行一次save操作滚秩。
- 當(dāng)滿足save條件時(shí)(規(guī)定時(shí)間內(nèi)操作了指定次數(shù):插入、刪除淮捆、更新郁油,不包括get),Redis會(huì)將表中的數(shù)據(jù)保存至dump.rdb文件中攀痊,也會(huì)執(zhí)行save操作桐腌。save操作執(zhí)行條件如下(
save 秒鐘 寫操作次數(shù)
):
Redis.conf中Snapshot相關(guān)配置:
- 直接輸入save可以立即執(zhí)行備份。
禁用:
- 如果想禁用RDB持久化策略苟径,只要不設(shè)置任何save指令案站,或者給save傳入一個(gè)空字符串也可以
Stop-writes-on-bgsave-error
rdbcompression壓縮
如何觸發(fā)RDB快照:
- 配置文件中默認(rèn)的快照配置。
冷拷貝直接使用涩笤,可以cp dump.rdb dump_new.rdb - 命令save或是bgsave嚼吞。
1.Save:save時(shí)只管保存盒件,其他不管蹬碧,全部阻塞。
2.BGSAVE:Redis會(huì)在后臺(tái)異步進(jìn)行快照操作炒刁,快照同時(shí)還可以響應(yīng)客戶端請(qǐng)求恩沽。可以通過lastsave命令獲取最后一次成功執(zhí)行快照的時(shí)間翔始。 - 執(zhí)行flushall命令罗心,也會(huì)產(chǎn)生dump.rdb文件,但里面是空的城瞎,無(wú)意義渤闷。
如何恢復(fù):
- 將備份文件(dump.rdb)移動(dòng)到redis安裝目錄并啟動(dòng)服務(wù)即可。
- CONFIG GET dir獲取目錄脖镀。
優(yōu)勢(shì):
- 適合大規(guī)模的數(shù)據(jù)恢復(fù)飒箭。
- 對(duì)數(shù)據(jù)完整性和一致性要求不高。
劣勢(shì):
- 在一定間隔時(shí)間做一次備份蜒灰,所以如果redis意外down掉的話弦蹂,就會(huì)失去最后一次快照后的所有修改。
- Fork的時(shí)候强窖,內(nèi)存中的數(shù)據(jù)被克隆了一份凸椿,大致2倍的碰著性需要考慮。
如何停止:
- 動(dòng)態(tài)所有停止RDB保存規(guī)則的方法:redis-cli config set save ""
3.AOF(Append Only File)
3.1.是什么
- 以日志的形式來(lái)記錄每個(gè)文件寫操作翅溺,將Redis執(zhí)行過的所有寫指令記錄下來(lái)(讀操作不記錄)脑漫,只許追加文件但不可以改寫文件髓抑,redis啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù),換言之优幸,redis重啟的話就根據(jù)日志文件的內(nèi)容將指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作启昧。
3.2.AOF配置文件
3.3.注意事項(xiàng)
- 自動(dòng)生成的aof配置文件最后會(huì)有FLUSHALL指令,即加載完所有的數(shù)據(jù)恢復(fù)工作之后劈伴,會(huì)執(zhí)行FLUSHALL清空指令密末。
- 若AOF配置中包含非法語(yǔ)句,則Redis-server會(huì)啟動(dòng)失敗跛璧。此時(shí)严里,可以使用redis-check-aof --fix 文件名稱來(lái)排查文件中的錯(cuò)誤。
3.4.配置位置
- appendonly no:默認(rèn)是no追城,yes就打開aof持久化刹碾。
3.5.APPEND ONLY MODE追加
- appendonly:
- appendfilename:
-
Appendfsync:
1.Always:同步持久化 每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤 性能較差且數(shù)據(jù)完整性比較好。
2.Everysec:出廠默認(rèn)推薦座柱,異步操作迷帜,每秒紀(jì)錄 如果一秒內(nèi)宕機(jī),有數(shù)據(jù)丟失色洞。
3.No** - No-appendfsync-on-rewrite :重寫時(shí)是否可以運(yùn)用Appendfsync戏锹,用默認(rèn)no即可,保證數(shù)據(jù)安全性火诸。
- Auto-aof-rewrite-min-size:設(shè)置重寫的基準(zhǔn)值
- Auto-aof-rewrite-percentage:設(shè)置重寫的基準(zhǔn)值
3.6.AOF啟動(dòng)/修復(fù)/恢復(fù)
-
正辰跽耄恢復(fù):
1.啟動(dòng):修改默認(rèn)的appendonly no.,改為yes置蜀。
2.將所有數(shù)據(jù)的aof文件復(fù)制一份保存到對(duì)應(yīng)目錄(config get dir)
3.恢復(fù):重啟redis然后重新加載 -
異衬嗡眩恢復(fù):
1.啟動(dòng):設(shè)置Yes
2.備份被寫壞的AOF文件
3.Redis-check-aof --fix進(jìn)行修復(fù)
4.重啟redis然后重新加載
3.7.Rewrite
是什么:
AOF采用文件追加方式,文件會(huì)越來(lái)越大盯荤,為避免出現(xiàn)此情況馋吗,新增了重寫機(jī)制,當(dāng)AOF文件的大小超過所有設(shè)定的閾值時(shí)秋秤,Redis就會(huì)啟動(dòng)AOF文件的內(nèi)容壓縮宏粤,只保留可以恢復(fù)數(shù)據(jù)的最小指令集,可以使用命令bgrewriteaof
重寫原理
- AOF文件持續(xù)增長(zhǎng)而過大時(shí)航缀,會(huì)fork出一條新進(jìn)程來(lái)將文件重寫(也是先寫臨時(shí)文件最后再rename)商架,遍歷新進(jìn)程的內(nèi)存中數(shù)據(jù),每條記錄有一條的Set語(yǔ)句芥玉,重寫aof文件的操作蛇摸,并沒有讀取舊的aof文件,而是將整個(gè)內(nèi)存中的數(shù)據(jù)庫(kù)內(nèi)容用命令的方式重寫了一個(gè)新的aof文件灿巧,這點(diǎn)和快照有點(diǎn)類似赶袄。
觸發(fā)機(jī)制
- Redis會(huì)記錄上次重寫時(shí)的AOF大小揽涮,默認(rèn)配置是當(dāng)AOF文件大小是上次rewrite后大小的一倍且文件大于64M時(shí)觸發(fā)。
3.8.優(yōu)勢(shì)
- 每秒同步:appendfsync always 同步持久化 每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤 性能較差且數(shù)據(jù)完整性比較好饿肺。
- 每修改同步:appendfsync everysec 出廠默認(rèn)推薦蒋困,異步操作,每秒紀(jì)錄 如果一秒內(nèi)宕機(jī)敬辣,有數(shù)據(jù)丟失雪标。
- 不同步:appendfsync no 從不同步
3.9.劣勢(shì)
- 相同數(shù)據(jù)集的數(shù)據(jù)而言aof文件要遠(yuǎn)大于rdb文件,恢復(fù)速度慢于rdb
- Aof運(yùn)行效率要慢于rdn溉跃,每秒同步策略效果較好村刨,不同步效率和rdb相同
3.10.總結(jié)
性能建議:
文集推薦:
Java基礎(chǔ)方法集1
Python基礎(chǔ)知識(shí)完整版
Spring Boot學(xué)習(xí)筆記
Linux指令進(jìn)階
Java高并發(fā)編程
SpringMVC基礎(chǔ)知識(shí)進(jìn)階
Mysql基礎(chǔ)知識(shí)完整版
健康管理系統(tǒng)學(xué)習(xí)花絮(學(xué)習(xí)記錄)
Node.js基礎(chǔ)知識(shí)(隨手筆記)
MongoDB基礎(chǔ)知識(shí)
Dubbo學(xué)習(xí)筆記
Vue學(xué)習(xí)筆記(隨手筆記)
聲明:發(fā)表此文是出于傳遞更多信息之目的。若有來(lái)源標(biāo)注錯(cuò)誤或侵犯了您的合法權(quán)益撰茎,請(qǐng)作者持權(quán)屬證明與本我們(QQ:981086665嵌牺;郵箱:981086665@qq.com)聯(lián)系聯(lián)系,我們將及時(shí)更正龄糊、刪除逆粹,謝謝。