redis-持久化

1、概述

redis支持兩種持久化方式,rdb和aof。rdb是數據庫某一時刻的快照,aof是Append Only File,aof通過寫命令記錄數據庫的狀態。目前我們線上沒開rdb,主從redis都開啟了aof everysec。

2、RDB

有兩個命令可以生成RDB文件,一個是save,另一個是bgsave。

save命令會阻塞redis進程,直到生成rdb文件,阻塞期間不能處理任何命令,一般線上很少使用。

bgsave命令的保存工作是由子進程執行的,子進程生成rdb文件的過程中,主進程仍然可以處理客戶端的命令。

用戶可以通過redis配置來設置rdb的保存頻率,服務器是通過執行bgsave來生成rdb文件的。

save? 900? 1:服務器在900秒之內,對數據庫至少進行了1次修改

save? 300? 10:服務器在300秒之內,對數據庫至少進行了10次修改

save? 60? 10000:服務器在60秒之內,對數據庫至少進行了10000次修改

3、aof

aof記錄的是redis接收到的客戶端寫請求,當redis接收到寫命令時,會先記錄到內存的aof_buf緩沖區的末尾,當滿足配置的aof持久化策略時,就會寫入或同步到磁盤中。

always:每個事件循環將aof_buf緩沖區中的內容寫入并同步到aof文件。

everysec:每個事件循環將aof_buf緩沖區中的內容寫入到aof文件,每1秒同步一次。

no:每個事件循環將aof_buf緩沖區中的內容寫入到aof文件,但并不對aof文件進行同步,同步交給系統處理。

aof文件里面有很多失效的數據,會占用大量的空間,redis會根據配置對aof文件進行重寫。

no-appendfsync-on-rewrite no 在aof文件重寫時appendfsync選項是否設置成no,如果設置成no將會將同步磁盤的工作交給系統,如果redis掛了有一些寫記錄是沒有同步到aof文件中的,會丟失部分數據,如果設置不設置成no將會根據appendfsync同步數據,兩個進程同時向磁盤同步數據會出現寫抖動。

auto-aof-rewrite-percentage 100 當前aof文件大小是上次日志重寫得到aof文件大小的二倍時,自動啟動新的日志重寫過程。

auto-aof-rewrite-min-size 64mb? 當前aof文件啟動重寫過程的最小值,避免剛剛啟動reids時由于文件尺寸較小導致頻繁的重寫。

aof重寫是通過子進程進行的,重寫過程中如果redis收到新的寫命令將會記錄到重寫緩沖區中,主進程定期調用wait3函數等待子進程退出,并將重寫緩沖區中的日志記錄到新的aof文件中。

4、其它

redis啟動的時候,優先加載aof文件,如果aof沒有aof文件,再加載rdb文件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 介紹 首先,我們應該明確持久化的數據有什么用,答案是用于重啟后的數據恢復。 Redis是一個內存數據庫,無論是RD...
    小王寫bug閱讀 932評論 0 1
  • 本文翻譯自官方文檔http://redis.io/topics/persistence 。 Redis 持久化 R...
    六尺帳篷閱讀 1,645評論 1 15
  • Redis持久化: 提供了多種不同級別的持久化方式:一種是RDB,另一種是AOF. RDB 持久化可以在指定的時間...
    不姓馬的小馬哥閱讀 650評論 0 10
  • 本文檔翻譯自http://redis.io/topics/persistence。 這篇文章提供了 Redis 持...
    daos閱讀 703評論 0 10
  • Redis 持久化: 常用的兩種持久化 提供了多種不同級別的持久化方式:一種是RDB,另一種是AOF. RDB 持...
    邊學邊記閱讀 1,152評論 0 1