Redis持久化

Redis是內(nèi)存數(shù)據(jù)庫,如果不將內(nèi)存中的數(shù)據(jù)庫狀態(tài)保存到磁盤中,那么一旦服務(wù)器進(jìn)程退出,服務(wù)器的數(shù)據(jù)庫狀態(tài)也會(huì)消失,所以Redis提供了持久化功能。

RDB(Redis DataBase)

  • 在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,它恢復(fù)時(shí)是將快照文件直接讀到內(nèi)存里。
  • Redis會(huì)單獨(dú)創(chuàng)建(fork)一個(gè)子進(jìn)程來進(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方式比AOF方式更加高效。
  • RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。
  • RDB保存的默認(rèn)文件是dump.rdb
觸發(fā)機(jī)制
  • sava規(guī)則滿足的情況下,會(huì)自動(dòng)觸發(fā)rdb規(guī)則


  • 執(zhí)行 flushall 命令,也會(huì)觸發(fā)我們的rdb規(guī)則
  • 退出Redis,也會(huì)產(chǎn)生 rdb 文件

備份就自動(dòng)生成一個(gè)dump.rdb文件


恢復(fù)rdb文件
  1. 只需要將rdb文件放在我們的redis啟動(dòng)目錄就可以,redis啟動(dòng)的時(shí)候會(huì)自動(dòng)檢查dump.rdb恢復(fù)其中的數(shù)據(jù)
  2. 查看需要存在的位置
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin" # 如果這個(gè)目錄下存在dump.rdb 文件,啟動(dòng)就會(huì)自動(dòng)恢復(fù)其中的數(shù)據(jù)
優(yōu)點(diǎn)
  1. 適合大規(guī)模的數(shù)據(jù)恢復(fù)
  2. 對(duì)數(shù)據(jù)的完整性要求不高
缺點(diǎn)
  1. 需要一定的時(shí)間間隔進(jìn)行操作!如果redis意外宕機(jī)了,最后一次修改的數(shù)據(jù)就沒有了
  2. fork進(jìn)程的時(shí)候,會(huì)占用一定的內(nèi)存空間

AOF(Append Only File)

將我們的所有命令都記錄下來,history,恢復(fù)的時(shí)候就把文件全部都執(zhí)行一遍!

  • 以日志的形式來記錄每個(gè)寫操作,將Redis執(zhí)行過的所有指令記錄下來(讀操作不記錄)
  • 只追加文件但不可以改寫文件
  • redis啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù)
  • Aof保存的是 Appendonly.aof文件
append
  • 默認(rèn)是不開啟的,我也要進(jìn)行手動(dòng)配置。只需要將 appendonly 改為 yes就開啟了aof,重啟redis即可生效


  • 如果aof文件有錯(cuò)誤,這時(shí)候redis是無法啟動(dòng)的,我們需要修復(fù)這個(gè)aof文件,redis給我們提供了一個(gè)工具redis-check-aof --fix appendonly.aof
優(yōu)點(diǎn)
  1. 每次修改都同步,文件的完整性會(huì)更加好
  2. 每秒同步一次,可能會(huì)丟失一秒的數(shù)據(jù)
  3. 從不同步,效率最高
缺點(diǎn)
  1. 相對(duì)于數(shù)據(jù)文件來說,aof遠(yuǎn)遠(yuǎn)大于rdb,修復(fù)速度也比rdb慢
  2. aof運(yùn)行效率也要比rdb慢,所以我們r(jià)edis默認(rèn)的配置就是rdb持久化
appendonly no # 默認(rèn)不開啟,默認(rèn)使用rdb方式持久化,在大部分情況下,rdb完全夠用
appendfilename "appendonly.aof" # 持久化文件的名字

# appendfsync always # 每次修改都會(huì)同步 sync,消耗性能
appendfsync everysec # 每秒執(zhí)行一次 sync,可能會(huì)丟失這一秒的數(shù)據(jù)
# appendfsync no # 不執(zhí)行 sync,這個(gè)時(shí)候操作系統(tǒng)自己同步數(shù)據(jù),速度最快

# rewrite 重寫

如果


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容