always:伺服器每寫入乙個命令,就呼叫一次fdatasync,將緩衝區裡面的命令寫入到硬碟裡面,在這種模式下,伺服器即使遭遇到意外停機,也不會丟失任何自己已經成功執行的命令資料。
ererysec:伺服器每一秒鐘呼叫一次fdatasync,將緩衝區裡面的命令寫入到硬碟裡面,在這種模式下,伺服器即使遭遇意外停機,最多隻丟失一秒鐘內的執行命令資料。
no:伺服器不主動呼叫fdatasync,由作業系統決定何時將緩衝區裡面的命令寫入到硬碟裡面。在這種模式下,伺服器遭遇意外停機時,丟失的命令資料是不確定的。
執行速度:always的速度慢,ererysec和no都很快。
預設值:everysec
二 aof檔案的冗餘命令
隨著伺服器不斷執行,為了記錄資料庫發生的變化,伺服器會將越來越多的命令寫入到aof檔案裡面,使得aof檔案的體積不斷增大。
為了讓aof檔案的大小控制在合理的範圍,避免它胡亂增長,redis提供了aof重寫功能,通過這個功能,伺服器可以產生乙個新的aof檔案:
1 新的aof檔案記錄的資料庫資料和原有的aof檔案記錄的資料庫資料完全一樣。
2 新的aof檔案會使用盡可能少的命令來記錄資料庫中的資料,因此新的aof檔案體積通常會比原有的aof檔案的體積要小得多。
3 aof重寫期間,伺服器不會被阻塞,可以正常處理客戶端傳送的命令請求。
三 aof重寫原理
四 觸發重寫條件
有兩種方法可以觸發aof重寫:
1 客戶端向伺服器傳送bgrewriteaof命令。
2 通過設定配置選項來讓伺服器自動執行bgrewriteaof命令,他們分別是:
auto-aof-rewrite-min-size ,觸發aof重寫所需要的最小體積:只要在aof檔案的體積大於等於size時。伺服器才會考慮是否需要重寫aof,這個選項避免體積過小的aof檔案進行重寫
auto-aof-rewrite-percentage ,指定觸發重寫所需的aof檔案體積百分比:當aof檔案的體積大於auto-aof-rewrite-min-size指定體積,並且超過上一次重寫之後的aof體積的percent%時,就會觸發aof重寫。如果伺服器剛剛啟動不久,還沒有進行過aof重寫,那麼使用伺服器啟動時載入的aof檔案的體積來作為基準值。將這個值設定為0,表示關閉自動aof重寫。
例子auto-aof-rewrite-min-size 64mb
auto-aof-rewrite-percentage 100
第1條規則的意思是:當aof檔案大於64mb之後才考慮進行aof重寫,然後第2條規則的意思是說只有當aof檔案的增量大於100%的時候才進行重寫,也就是大一倍的時候才觸發。
五 rdb和aof方式對比
六 補充說明
可以同時使用兩種持久化,根據你的需要來判斷,還原資料優先使用aof檔案。
所以說redis資料庫安全性比不上sql資料庫的安全性是個誤解,當使用always模式執行時,redis持久化和一般的sql資料庫持久化方式一樣的。
七 實戰
[root@master ~]# redis-cli
127.0.0.1:6379> bgrewriteaof
[root@master ~]# cd /root
redis持久化 AOF持久化
1.aof持久化原理 aof持久化會將被執行的寫命令寫到aof檔案的末尾。在恢復的時候,redis只要從頭到尾重新執行一次aof檔案包含的所有寫命令 2.配置選項 固態硬碟禁用always選項,在某些情況頻繁讀寫會大大降低固態硬碟的壽命 4.aof檔案的重寫和壓縮 aof檔案裡面記錄了所有的命令而不...
Redis學習(二) AOF持久化
1 aof檔案通過儲存修改資料庫的寫命令請求來記錄伺服器的資料庫狀態 3 伺服器在載入aof檔案時,是通過重新執行其中的請求命令進行還原資料庫的狀態 4 aof重寫會產生乙個新的aof檔案,只不過相比之下,體積更小隨著時間的流逝和業務不斷的擴充套件,會使得資料庫中資料的不斷膨脹,redis伺服器執行...
Redis的持久化 AOF
redis的aof持久化策略是將傳送到redis服務端的每一條命令都記錄下來,並且儲存到硬碟中的aof檔案中,類似打日誌檔案,來一條命令就記錄一條。aof設定 aof測試 當客戶端向伺服器傳送一些redis命令時,redis會將所執行的命令記錄到aof檔案中,如下所示 當redis伺服器重啟後,會將...