redis提供了rdb和aof兩種持久化儲存方案
rdb持久化是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟。也是預設的持久化方式,這種方式是就是將記憶體中資料以快照的方式寫入到二進位制檔案中,預設的檔名為dump.rdb
對於rdb來說,提供了三種機制:s**e、bgs**e、自動化
該命令會阻塞當前redis伺服器,執行s**e命令期間,redis不能處理其他命令,直到rdb過程完成為止。
執行該命令時,redis會在後台非同步進行快照操作,快照同時還可以響應客戶端請求。
具體操作是redis程序執行fork操作建立子程序,rdb持久化過程由子程序負責,完成後自動結束。阻塞只發生在fork階段,一般時間很短。基本上 redis 內部所有的rdb操作都是採用 bgs**e 命令。
自動觸發是由我們的配置檔案來完成的。
命令s**e
bgs**e
io型別
同步非同步
阻塞阻塞
阻塞(fork階段)
複雜度o(n)
o(n)
優點不消耗額外記憶體
不阻塞客戶端命令
缺點阻塞客戶端命令
需要額外記憶體fork
優點rdb檔案緊湊,全量備份,非常適合用於進行備份和災難恢復。
生成rdb檔案的時候,redis主程序會fork()乙個子程序來處理所有儲存工作,主程序不需要進行任何磁碟io操作。
rdb 在恢復大資料集時的速度比 aof 的恢復速度要快。
缺點rdb快照是一次全量備份,儲存的是記憶體資料的二進位制序列化形式,儲存上非常緊湊。當進行快照持久化時,會開啟乙個子程序專門負責快照持久化,子程序會擁有父程序的記憶體資料,父程序修改記憶體子程序不會反應出來,所以在快照持久化期間修改的資料不會被儲存,可能丟失資料。
redis會將每乙個收到的寫命令都通過write函式追加到檔案中。通俗的理解就是日誌記錄
aof的方式也同時帶來了另乙個問題。持久化檔案會變的越來越大。為了壓縮aof的持久化檔案。redis提供了bgrewriteaof命令。將記憶體中的資料以命令的方式儲存到臨時檔案中,同時會fork出一條新程序來將檔案重寫
重寫aof檔案的操作,並沒有讀取舊的aof檔案,而是將整個記憶體中的資料庫內容用命令的方式重寫了乙個新的aof檔案,這點和快照有點類似
每修改同步always:同步持久化 每次發生資料變更會被立即記錄到磁碟 效能較差但資料完整性比較好
每秒同步everysec:非同步操作,每秒記錄 如果一秒內宕機,有資料丟失
不同no:從不同步
命令always
everysec
no優點
不丟資料
每秒一次fsync
不管資料
缺點io開銷大,磁碟tps幾百
可能丟1秒資料
不可控優點
aof可以更好的保護資料不丟失,一般aof會每隔1秒,通過乙個後台執行緒執行一次fsync操作,最多丟失1秒鐘的資料。
aof日誌檔案沒有任何磁碟定址的開銷,寫入效能非常高,檔案不容易破損。
aof日誌檔案即使過大的時候,出現後台重寫操作,也不會影響客戶端的讀寫。
aof日誌檔案的命令通過非常可讀的方式進行記錄,這個特性非常適合做災難性的誤刪除的緊急恢復。
缺點對於同乙份資料來說,aof日誌檔案通常比rdb資料快照檔案更大
aof開啟後,支援的寫qps會比rdb支援的寫qps低,因為aof一般會配置成每秒fsync一次日誌檔案,當然,每秒一次fsync,效能也還是很高的
詳解redis中兩種持久化機制rdb和aof
Redis的持久化儲存
redis是一種高階key value資料庫。支援字串 雜湊表 列表 集合 有序集合等資料型別。redis的強大效能很大程度上都是因為所有資料都是儲存在記憶體中的,然而當redis重啟後,所有儲存在記憶體中的資料將會丟失,在很多情況下是無法容忍這樣的事情的。所以,我們需要將記憶體中的資料持久化。為了...
Redis持久儲存
rdb持久儲存 aof持久化的實現 aof的優點 aof的缺點 rdb的優點 rdb的缺點 隨著日誌內容的遞增,aof檔案會越來越大,為了解決這種問題,我們可以對aof檔案進行重寫,執行如下操作 redis cli h ip p port bgrewriteaof 執行的過程 在當前的快照儲存工作結...
redis持久化 AOF持久化
1.aof持久化原理 aof持久化會將被執行的寫命令寫到aof檔案的末尾。在恢復的時候,redis只要從頭到尾重新執行一次aof檔案包含的所有寫命令 2.配置選項 固態硬碟禁用always選項,在某些情況頻繁讀寫會大大降低固態硬碟的壽命 4.aof檔案的重寫和壓縮 aof檔案裡面記錄了所有的命令而不...