Redis持久化中的AOF(Append Only File)持久化
文章目錄
- Redis持久化中的AOF(Append Only File)持久化
- 開啟aof持久化
- aof持久化的時候appendonly.aof持久化文件是什么時候生成的?
- appendonly.aof文件中的數據是什么時候怎樣恢復到redis數據庫中的?
- 怎樣把appendonly.aof持久化文件里面的數據恢復到redis數據庫中?
- 使用redis-check-aof工具校驗appendonly.aof持久化文件中的內容
- aof持久化的時候緩存中的內容同步到硬盤的三種方式
- 在什么情況下redis數據庫中寫的命令可以追加到appendonly.aof文件中?
- aof持久化的優點和缺點
Redis持久化中的AOF(Append Only File)持久化
開啟aof持久化
從上圖中可以看出aof持久化是追加模式,也就是如果使用的是aof持久化,那么在redis寫的所有的命令都會被追加到appendonly.aof持久化文件中;aof持久化方式不像rdb持久化,因為rdb持久化不會在dump.rdb文件中追加內容,它是先對redis此時16個數據庫的狀態進行一次快照操作,然后生成一個持久化文件dump.rdb,然后用后面生成的這個dump.rdb文件直接替換掉上一個dump.rdb文件;
注意:aof持久化文件appendonly.aof中存儲的都是redis數據庫中已經執行過得命令,但是rdb持久化文件dump.rdb中存儲的是redis數據庫中的內容。
默認是不開啟的,需要手動進行配置。我們只需要將appendonly改為yes就開啟了aof,如下圖:
aof持久化的時候appendonly.aof持久化文件是什么時候生成的?
如果用的是aof持久化,那么redis數據庫中所有的新的寫的信息都會追加到appendonly.aof文件當中,如下圖:
但是這個appendonly.aof文件是在什么時候生成的呢?請看下圖:
也就是說在只要你用的是aof持久化方式,那么在啟動redis服務器的時候,就會自動生成appendonly.aof持久化文件。
appendonly.aof文件中的數據是什么時候怎樣恢復到redis數據庫中的?
在redis服務器啟動的時候,appendonly.aof文件中的數據會恢復到redis數據庫中,但是要注意的一點是redis配置文件中的appendonly的值必須要設置成yes,表示的是redis會使用aof持久化,reids默認情況下使用的是rdb持久化,在redis服務啟動的時候會使用dump.rdb持久化文件恢復數據,所以如果想要使用aof持久化,通過appendonly.aof文件恢復redis數據庫里面的數據,那么redis配置文件中的appendonly的值一定要設置成是yes,如下圖:
怎樣把appendonly.aof持久化文件里面的數據恢復到redis數據庫中?
其實aof持久化恢復appendonly.aof文件中的數據與rdb持久化恢復dump.rdb里面的數據過程都類似,就是先開啟redis配置文件中對aof持久化的支持,即把appendonly的值設置成是yes,然后把appendonly.aof這個文件放到redis-cli的同級目錄下,然后斷開連接,重啟redis服務,重新連接redis客戶端,這樣就可以把appendonly.aof文件中的內容給恢復了,如下圖:
使用redis-check-aof工具校驗appendonly.aof持久化文件中的內容
appendonly.aof文件中記錄了我們所有的寫操作,如果appendonly.aof文件中有錯誤,那么這個時候redis是啟動不起來的。我們需要修復這個aof文件,redis給我們提供了這樣一個工具,redis-check-aof,對應的命令是redis-check-aof --fix appendonly.aof,假設appendonly.aof持久化文件中有一些不規范的內容,所謂的不規范也就是不屬于redis數據庫的命令,因為持久化文件appendonly.aof中存放的全是命令,可以通過redis-check-aof這個校驗工具去刪除持久化文件appendonly.aof中的不規范的數據,如下圖:
假設不對上面的appendonly.aof文件更改,那么當連接redis服務器的時候就會出錯,如下圖:
然后可以使用redis-check-aof去校驗appendonly.aof文件,如下圖:
appendonly.aof文件校驗成功之后,可以再次查看appendonly.aof文件中的內容,和沒校驗之前做一次比較,如下圖:
最后重啟一下redis服務,看看此時redis客戶端能不能連接成功,如下圖:
aof持久化的時候緩存中的內容同步到硬盤的三種方式
在使用aof持久化的時候,在redis數據庫中寫的命令并不是立刻被同步到持久化文件appendonly.aof中的,而是先把命令保存到緩存中,然后再把緩存中的數據同步到持久化文件appendonly.aof中的,這里面牽涉到了三種把緩存中的數據同步到持久化文件appendonly.aof中的機制,如下圖:
默認使用的方式是appendfsync everysec;
在什么情況下redis數據庫中寫的命令可以追加到appendonly.aof文件中?
我在驗證在redis數據庫中寫的命令都可以追加到appendonly.aof文件中時出現了一個問題,就是我在redis中執行的寫的命令,在一些情況下可以保存到appendonly.aof文件中,而在另一些情況下不能夠保存到appendonly.aof文件中,這是為什么呢?
這是因為只有當第一次重新連接redis-cli客戶端的時候,在redis中寫的所有的命令才能夠追加到原來的appendonly.aof文件中,如果此時從redis-cli客戶端退出,但是卻不關閉redis-cli客戶端然后重新打開redis-server服務,那么當你再次連接redis客戶端的時候,你在redis數據庫中的操作命令是不能夠被追加到appendonly.aof文件中的,這兩種情況一種是在redis數據庫中寫的命令可以追加到appendonly.aof持久化文件中,另外一種是在redis數據庫中寫的命令不能追加到appendonly.aof持久化文件中,先來看一下在redis數據庫中寫的命令能夠追加到appendonly.aof持久化文件中的情況,如下圖:
再來看一下在redis數據庫中寫的命令不能追加到appendonly.aof持久化文件中的情況,如下圖:
aof持久化的優點和缺點
優點:每一次修改都同步,文件的完整性會更加好。
缺點:如果每秒同步一次,可能會丟失一秒的數據。aof的運行效率比rdb要慢,所以我們redis默認的配置是rdb持久化。
總結
以上是生活随笔為你收集整理的Redis持久化中的AOF(Append Only File)持久化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器是如何运行的
- 下一篇: HC-05蓝牙模块简易说明