redis資料儲存之-aof日誌持久化
阿新 • • 發佈:2020-12-22
原理:將執行的每一條命令,立即儲存到一個指定的檔案中
配置: 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是命令,需要逐條執行