Redis (三:持久化)

RDB方式

rdb通過snapshot實現

  • 根據配置規則
    save M N 即M秒內更改了至少N個鍵,就持久化
  • 用戶執行save或bgsave,save會阻塞client請求,bgsave是異步的不阻塞
  • flushall若定義過save規則,則執行flushall後snapshot一次,沒定義過save則不執行
  • 主從複製時

快照原理

redis fork 出一個子進程來寫入臨時文件,父進程繼續處理client命令
子進程寫完後會替換原來的.rdb

在unix下 會採用寫時複製技術,當父進程中產生對某片內容修改時,複製這一片內容給父進程修改.這保證了在快照時內存佔用不會擴大一倍.快照時若修改過多會造成內存佔用過大

只會持久保存最後一次持久化的內容,之後的內容會在異常時丟失

AOF方式

AOF方式時每執行一次修改redis數據的操作就將該命令記錄寫入.AOF文件
配置 .conf中
appendonly no默認不開啓aof
appendonly yes 開啓aof

持續的寫入可能會產生很多冗餘的命令,可以指定重寫規則去除冗餘項
auto-aof-rewrite-percentage 100 達到上一個文件的多少百分比後重寫
auto-aof-rewrite-min-size 重寫的最小size,因爲過小的文件冗餘也不會很多,不會影響性能

同步硬盤數據

事實上雖然我們aof了,但是數據並不會被操作系統立刻刷新到硬盤上,一般操作系統會30s執行一次同步
可以使用appendfsync everysec配置來每秒往硬盤裏寫一次
顯然會使redis變慢,不過一般可以接受
appendfsync always更新aof都硬盤同步
appendfsync no按照操作系統的默認同步

總結

允許同時開啓rdb和aof,重啓後會從aof中恢復,因爲一般aof中丟失的數據更少

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章