redis持久化方式分爲兩種:RDB快照和AOF方式(默認爲RDB模式),當Redis服務器重啓的時候,會自動恢復數據,優先從AOF中恢復,其次才從RDB中恢復
1、RDB快照模式
RDB方式原理:當redis須要作持久化時(執行SAVA或者BGSAVA命令,或者是達到配置條件時執行),redis會fork一個子進程,子進程將數據寫到磁盤上一個臨時RDB文件中,當子進程完成寫臨時文件後,將原來的RDB替換掉(默認文件名爲dump.rdb)
RDB備份條件和命令:
一、執行SAVE命令,在當前線程執行,會卡住
二、執行BGSAVE命令,在後臺線程執行,立刻返回
三、當符合用戶給定的配置條件時Redis會自動將內存中的全部數據進行快照並存儲在硬盤上。由兩個參數構成:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照,在配置文件redis.conf中
已經預置了3個條件:
save 900 1 # 900秒內有至少1個鍵被更改則進行快照 save 300 10 # 300秒內有至少10個鍵被更改則進行快照 save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照
RDB優缺點:
定時備份,Redis效率高,可是容易形成數據丟失,丟失的多少和備份策略有關,例如:5分鐘備份一次,可是第8分時宕機了,那麼就丟失了後面的3分鐘數據
1、AOF模式
AOF方式原理:AOF就能夠作到全程持久化,Redis每執行一個修改數據的命令,都會把這個命令添加到AOF文件中,當Redis重啓時,將會讀取AOF文件進行「重放」以恢復到 Redis關閉前的最後時刻。
因爲os會在內核中緩存 write作的修改,因此可能不是當即寫到磁盤上。這樣aof方式的持久化也仍是有可能會丟失部分修改。不過咱們能夠經過配置文件告訴redis咱們想要 經過fsync函數強制os寫入到磁盤的時機。有三種方式以下(默認是:每秒fsync一次)
appendonly yes //啓用aof持久化方式
# appendfsync always //每次收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用
appendfsync everysec //每秒鐘強制寫入磁盤一次,在性能和持久化方面作了很好的折中,推薦
# appendfsync no //徹底依賴os,性能最好,持久化沒保證
AOF優缺點
AOF基本能夠保證數據不丟失,可是AOF持久化文件會變的愈來愈大。例如咱們調用incr test命令100次,文件中必須保存所有的100條命令,其實有99條都是多餘的。