一、RDB
*.rdb 文件就是redis 的持久化文件
原理是redis會單獨創建(fork)一個與當前線程一模一樣的子進程來進行持久化,這個子線程的所有數據(變量。環境變量,程序程序計數器等)都和原進程一模一樣,會先將數據寫入到一個臨時文件中,待持久化結束了,再用這個臨時文件替換上次持久化好的文件,整個過程中,主進程不進行任何的io操作,這就確保了極高的性能
觸發機制
shutdown時,如果沒有開啓aof,會觸發
配置文件中默認的快照配置
執行命令save或者bgsave save是隻管保存,其他不管,全部阻塞 bgsave: redis會在後臺異步進行快照操作,同時可以響應客戶端的請求
執行flushall命令 但是裏面是空的,無意義
二、AOF
保存操作日誌文件,不包括查操作
aof重寫機制
當AOF文件增長到一定大小的時候Redis能夠調用 bgrewriteaof對日誌文件進行重寫 。當AOF文件大小的增長率大於該配置項時自動開啓重寫(這裏指超過原大小的100%)。
auto-aof-rewrite-percentage 100
當AOF文件增長到一定大小的時候Redis能夠調用 bgrewriteaof對日誌文件進行重寫 。當AOF文件大小大於該配置項時自動開啓重寫
三、RDB和AOF
1.redis提供了rdb持久化方案,爲什麼還要aof?
優化數據丟失問題,rdb會丟失最後一次快照後的數據,aof丟失不會超過2秒的數據
2.如果aof和rdb同時存在,聽誰的?
aof
3.rdb和aof優勢劣勢
rdb 適合大規模的數據恢復,對數據完整性和一致性不高 , 在一定間隔時間做一次備份,如果redis意外down機的話,就會丟失最後一次快照後的所有操作
aof 根據配置項而定
1.官方建議 兩種持久化機制同時開啓,如果兩個同時開啓 優先使用aof持久化機制