Redis系列七:redis持久化

redis支持RDB和AOF兩種持久化機制,持久化能夠避免因進程退出而形成數據丟失redis

1、RDB持久化

RDB持久化把當前進程數據生成快照(.rdb)文件保存到硬盤的過程,有手動觸發和自動觸發
手動觸發有save和bgsave兩命令
save命令:阻塞當前Redis,直到RDB持久化過程完成爲止,若內存實例比較大會形成長時間阻塞,線上環境不建議用它
bgsave命令:redis進程執行fork操做建立子線程,由子線程完成持久化,阻塞時間很短(微秒級),是save的優化,在執行redis-cli shutdown關閉redis服務時,若是沒有開啓AOF持久化,自動執行bgsave;
顯然bgsave是對save的優化。app

bgsave運行流程性能

RDB文件的操做優化

   命令:config set dir /usr/local  //設置rdb文件保存路徑spa

   備份:bgsave  //將dump.rdb保存到usr/local下操作系統

   恢復:將dump.rdb放到redis安裝目錄與redis.conf同級目錄,重啓redis便可線程

   優勢:1,壓縮後的二進制文文件適用於備份、全量複製,用於災難恢復blog

              2,加載RDB恢復數據遠快於AOF方式進程

   缺點:1,沒法作到實時持久化,每次都要建立子進程,頻繁操做成本太高內存

              2,保存後的二進制文件,存在老版本不兼容新版本rdb文件的問題  

2、AOF持久化

針對RDB不適合實時持久化,redis提供了AOF持久化方式來解決

開啓:redis.conf設置:appendonly yes  (默認不開啓,爲no)

默認文件名:appendfilename "appendonly.aof"   

      流程說明:

    1,全部的寫入命令(set hset)append追加到aof_buf緩衝區中

         2AOF緩衝區向硬盤作sync同步

         3,隨着AOF文件愈來愈大,需按期對AOF文件rewrite重寫,達到壓縮

         4,當redis服務重啓,可load加載AOF文件進行恢復

AOF持久化流程:命令寫入(append),文件同步(sync),文件重寫(rewrite),重啓加載(load)

AOF配置詳解:

appendonly yes     //啓用aof持久化方式

# appendfsync always //每收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用

appendfsync everysec //每秒強制寫入磁盤一次,性能和持久化方面作了折中,推薦

# appendfsync no    //徹底依賴os,性能最好,持久化沒保證(操做系統自身的同步)

no-appendfsync-on-rewrite  yes  //正在導出rdb快照的過程當中,要不要中止同步aof

auto-aof-rewrite-percentage 100  //aof文件大小比起上次重寫時的大小,增加率100%,重寫

auto-aof-rewrite-min-size 64mb   //aof文件,至少超過64M,重寫

如何從AOF恢復?

1. 設置appendonly yes

2. appendonly.aof放到dir參數指定的目錄;

3. 啓動RedisRedis會自動加載appendonly.aof文件。

redis重啓時恢復加載AOF與RDB順序及流程:

1,當AOFRDB文件同時存在時,優先加載AOF

2,若關閉了AOF,加載RDB文件

3,加載AOF/RDB成功,redis重啓成功

4AOF/RDB存在錯誤,redis啓動失敗並打印錯誤信息

相關文章
相關標籤/搜索