1. 程式人生 > >redis學習(四)redis持久化之RDB、AOF

redis學習(四)redis持久化之RDB、AOF

出現 add 停用 nbsp 滿足 相同 客戶 -a 工具

redis是內存數據庫,它把數據存儲在內存中,這樣在加快讀取速度的同時也對數據安全性產生了新的問題,即當redis所在服務器發生宕機後,redis數據庫裏的所有數據將會全部丟失。為了解決這個問題,redis提供了持久化功能——RDB和AOF。通俗的講就是將內存中的數據寫入硬盤中。

一、RDB持久化

RDB持久化是指在指定的時間間隔內將內存中的數據集快照寫入磁盤,實際操作過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換之前的文件。當redis所在的服務器發生宕機,重啟會自動載入rdb文件,恢復數據。實際生產中,rdb備份文件通常保存在兩個服務器上。防止服務器發生故障,備份文件也丟失。

1、自動觸發

在conf配置文件中:

save 900 1
save 300 10
save 60 10000  

註意:你可以註釋掉所有的 save 行來停用保存功能。也可以直接一個空字符串來實現停用:save ""
當上面三個條件中有一個符合就會觸發RDB

2、手動觸發

當然如果不滿足上面條件,也可以手動觸發RDB

1)、SAVE是阻塞式的RDB持久化,當執行這個命令時redis的主進程把內存裏的數據庫狀態寫入到RDB文件中,直到該文件創建完畢的這段時間內redis將不能處理任何命令請求。

2)、BGSAVE屬於非阻塞式的持久化,它會創建一個子進程專門去把內存中的數據庫狀態寫入RDB文件裏,同時主進程還可以處理來自客戶端的命令請求。但子進程基本是復制的父進程,這等於兩個相同大小的redis進程在系統上運行,會造成內存使用率的大幅增加。

redis 127.0.0.1:6379> set k1 v1
OK
redis 127.0.0.1:6379> save
OK
redis 127.0.0.1:6379>

3、優缺點

優點:

1、采用這種方式,一旦系統出現故障,就可以用rdb文件進行恢復

2、在開始持久化時,它唯一需要做的只是fork出子進程,之後再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執行IO操作了。

3、RDB采用全量寫入,當數據發生變化,就會生成新的rdb文件來替代舊的rdb文件,相對於AOF,RDB恢復啟動效率更高

缺點:

1、系統一旦在定時持久化之前出現宕機現象,最後一次沒有來得及寫入磁盤的數據都將丟失。

2、由於RDB是通過fork子進程來協助完成數據持久化工作的,因此,如果當數據集較大時,可能會導致整個服務器停止服務幾百毫秒,甚至是1秒鐘。

一、AOF持久化

與RDB的保存整個redis數據庫狀態不同,AOF是通過保存對redis服務端的寫命令(如set、sadd、rpush)來記錄數據庫狀態的,即保存你對redis數據庫的寫操作,只許追加文件,不可改寫文件,redis啟動之初會讀取該文件將寫指令從前到後執行一次以完成數據的恢復工作。

1、配置

appendonly yes
appendfilename "appendonly.aof"
appendonly no修改為appendonly yes
appendfsync always
appendfsync everysec
appendfsync no

no表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快。
always表示每次寫入都執行fsync,以保證數據同步到磁盤。
everysec表示每秒執行一次fsync,可能會導致丟失這1s數據

如果redis開啟了AOF持久化功能,那麽當redis服務重啟時會優先使用AOF文件來還原數據庫。

2、aof文件修復

萬一aof文件遭到破壞,就可以使用命令redis-check-aof.exe appendonly.aof來修復。

3、優缺點

優點:

1)、Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。默認策略是每秒同步,效率高,所一旦系統出現宕機現象,那麽只會丟失一秒鐘之內修改的數據。

2)、采用增量寫入的方式,在寫入過程中即使出現宕機現象,也不會破壞日誌文件中已經存在的內容。即使出現亂碼,也可以通過redis-check-aof工具來幫助我們解決數據一致性的問題。

3)、如果日誌過大,Redis可以自動啟用rewrite機制。

4). AOF包含一個格式清晰、易於理解的日誌文件用於記錄所有的修改操作。用戶可以通過該文件完成數據的重建。

缺點:

1). 對於相同數量的數據集而言,AOF文件通常要大於RDB文件。RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。

2). 根據同步策略的不同,AOF在運行效率上往往會慢於RDB。總之,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB一樣高效。


redis學習(四)redis持久化之RDB、AOF