目錄
一、RDB
1、概念
2、RDB文件保存
3、執(zhí)行RDB
4、觸發(fā)RDB
5、fork原理
6、RDB的缺點(diǎn)
二、AOF
1、概念
2、開啟AOF
3、觸發(fā)AOF
4、觸發(fā)重寫AOF
三、區(qū)別
一、RDB
1、概念
RDB全稱為Redis Database Backup File(Redis數(shù)據(jù)備份文件),也叫做Redis數(shù)據(jù)快照。簡單的來說就是把某一時(shí)刻Redis內(nèi)存里的數(shù)據(jù)都記錄到磁盤中,當(dāng)Redis實(shí)例故障重啟后,從磁盤讀取快照文件恢復(fù)數(shù)據(jù)
2、RDB文件保存
在Redis的配置文件中我們可以修改RDB文件的相關(guān)配置,比如RDB文件的保存路徑,與該文件是否壓縮
rdbcompression yes? # 是否壓縮、不建議開啟,壓縮文件會消耗CPU
dbfilename dump.rdb # RDB文件的名稱
dir ./ # 文件保存路徑,默認(rèn)保存到當(dāng)前運(yùn)行目錄
3、執(zhí)行RDB
在Redis的客戶端,我們可以通過save與bgsave執(zhí)行快照操作,兩者的區(qū)別是save是占用主進(jìn)程去執(zhí)行,而bgsave是開啟一個(gè)子進(jìn)程去執(zhí)行,我們知道Redis是單進(jìn)程的,我們?nèi)绻褂胹ave命令時(shí),這個(gè)命令會占用當(dāng)前進(jìn)程使得其他命令阻塞等待,通常在Redis服務(wù)關(guān)閉時(shí)執(zhí)行一次save命令
4、觸發(fā)RDB
我們可以在Redis的配置文件中修改觸發(fā)RDB的規(guī)則
save 900 1? ? ? ?# 900秒內(nèi),如果至少有一個(gè)key被修改 則執(zhí)行bgsave
save 300 10??? # 300秒內(nèi),如果至少有十個(gè)key被修改 則執(zhí)行bgsave
save 600 10000? # 600秒內(nèi),如果至少有一萬個(gè)key被修改 則執(zhí)行bgsave
5、fork原理
bgsave在執(zhí)行的時(shí)候會fork主進(jìn)程得到子進(jìn)程,子進(jìn)程是共享主進(jìn)程的內(nèi)存數(shù)據(jù)的,在完成fork后讀取內(nèi)存中的數(shù)據(jù)寫入RDB文件,在子進(jìn)程fork主進(jìn)程時(shí)也是阻塞的。fork的過程中會將主進(jìn)程的頁表進(jìn)行復(fù)制也就是將虛擬內(nèi)存進(jìn)行拷貝(虛擬內(nèi)存可以映射到物理內(nèi)存),然后通過該頁表操作主進(jìn)程的內(nèi)存數(shù)據(jù),此時(shí)如果在子進(jìn)程RDB的過程中,主進(jìn)程進(jìn)行了寫操作,則可能會導(dǎo)致臟讀,為了避免臟讀,此時(shí)主進(jìn)程進(jìn)行寫操作時(shí)會話拷貝一份數(shù)據(jù)副本進(jìn)行寫操作
6、RDB的缺點(diǎn)
RDB的執(zhí)行間隔時(shí)間長,兩次RDB之間寫入數(shù)據(jù)有丟失風(fēng)險(xiǎn),如果在第一次寫入成功后第二次RDB之前Redis宕機(jī)則這個(gè)過程的數(shù)據(jù)會丟失,而且fork子進(jìn)程、壓縮、寫出RDB文件都比較耗時(shí)
二、AOF
1、概念
AOF全稱Append Only File(追加文件),Redis處理的沒有寫操作命令都會記錄在AOF文件中,可以看作為命令日志文件
2、開啟AOF
AOF默認(rèn)是關(guān)閉的。需要修改Redis的配置文件來開啟
appendony yes # 開啟
appendfilename “文件名“
3、觸發(fā)AOF
AOF的命令記錄頻率也是可以通過Redis配置文件進(jìn)行修改的
apppendfsync alaways # 執(zhí)行一次命令立即記錄到AOF文件中
apppendfsync everysec # 寫命令先存入AOF緩沖區(qū),然后每個(gè)1s將緩沖區(qū)的數(shù)據(jù)寫入AOF是默認(rèn)選項(xiàng)?
apppendfsync no #? 寫命令存入AOF緩沖區(qū),由操作系統(tǒng)決定何時(shí)寫入AOF
配置 | 刷盤時(shí)機(jī) | 優(yōu)點(diǎn) | 缺點(diǎn) |
alaways | 同步刷盤 | 可靠性高,數(shù)據(jù)不易丟失 | 性能影響大 |
everysec | 每秒刷盤 | 性能中 | 最多丟失1s數(shù)據(jù) |
no | 操作系統(tǒng)控制 | 性能最好 | 可靠性差,易丟失大量數(shù)據(jù) |
4、觸發(fā)重寫AOF
AOF是記錄寫命令,AOF會比RDB文件大得多,而AOF會記錄對一個(gè)key的多次寫操作,但是只有最后一次才有意義。我們可以通過bgrewriteaoff來觸發(fā)AOF文件執(zhí)行重寫,用最少的命令達(dá)到同樣的效果,在配置文件中可以配置觸發(fā)重寫的規(guī)則
auto-aof-rewrite-percentage 100 # AOF文件比上次的文件增長超過多少百分比重寫
auto-aof-rewrite-min-size 64mb # AOF文件體積最小多大以上觸發(fā)重寫文章來源:http://www.zghlxwxcb.cn/news/detail-477782.html
三、區(qū)別
文章來源地址http://www.zghlxwxcb.cn/news/detail-477782.html
到了這里,關(guān)于【Redis】Redis持久化機(jī)制RDB與AOF的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!