1. 程式人生 > 資料庫 >redis資料儲存之-aof日誌持久化

redis資料儲存之-aof日誌持久化

原理:將執行的每一條命令,立即儲存到一個指定的檔案中

配置: appendonly yes # 是否開啟 aof日誌功能

appendfsync always # 每一個命令,都立即同步到aof 安全,速度慢

appendfsync everysec # 折中方案 每一秒寫一次

appendfsync no # 寫入工作交給作業系統,由作業系統判斷快取區大小,統一寫到aof;同步頻率低 速度快

no-appendfsync-on-rewirte yes # 正在匯出rdb快照的過程中,要不要停止同步aof

下面兩者配置一同使用

auto-aof-rewrite-percentage 100 # aof檔案大小比起上次重寫時的大小,增長率100%,重寫

auto-aof-rewrite-min-size 64mb # aof檔案,至少超過64M時重寫
drwxr-xr-x. 2 root root   44 12月 10 10:32 .
drwxr-xr-x. 4 root root   46 12月 10 10:21 ..
-rw-r--r--. 1 root root  48M 12月 10 10:32 appendonly.aof
-rw-r--r--. 1 root root 3.9M 12月 10 10:32 dump.rdb
[root@localhost redis3.0]# ls -al rdb/ -lh
總用量 29M
drwxr-xr-x. 2 root root   44 12月 10 10:32 .
drwxr-xr-x. 4 root root   46 12月 10 10:21 ..
-rw-r--r--. 1 root root  25M 12月 10 10:32 appendonly.aof
-rw-r--r--. 1 root root 3.9M 12月 10 10:32 dump.rdb

通過redis-benchmark -n 次數 
直接展示了aof的重寫

也可以通過命令進行重寫
bgrewriteaof

在dump rdb過程中,aof如果停止同步,會不會丟失?

不會,所有的操作快取在記憶體的佇列裡,dump完成後,統一操作

aof操作的話,有個這樣的問題,比如設定age為1 然後incr age操作了100次,那麼age為101但是aof檔案中儲存了這100次操作並且,檔案又很大,能不能直接將age修復成101呢?

把記憶體中的key/value,逆化成相關的命令

使用aof重寫

aof重寫是?

aof重寫是指把記憶體中的資料,逆化成命令,寫到aof日誌裡,以解決aof日誌過大的問題

rdb和aof檔案都存在,我們優先使用aof來進行資料恢復

aof和rdb可以同時使用,但是不建議使用

rdb恢復資料比aof的恢復資料的速度快,因為rdb是資料的記憶體對映,直接載入記憶體,而aof是命令,需要逐條執行