rdb--redis database 在制定的時間間隔內將記憶體中的資料集快照寫入磁碟(snapshot快照),redis恢復時將快照檔案直接讀到記憶體。rdb儲存的是dump.rdb檔案(在bin/目錄下會看到)
redis會單獨建立(fork)乙個子程序來進行持久化,會先將資料寫入到乙個臨時檔案中,待持久化過程都結束了,再用這個臨時檔案替換上次持久化好的檔案。整個過程中,主程序是不進行任何io操作的,這就確保了極高的效能,如果需要進行大規模資料的恢復,且對於資料恢復的完整性不是非常敏感,那rdb方式要比aof方式更加的高效。rdb的缺點是最後一次持久化後的資料可能丟失。
1分鐘內改了1萬次,
5分鐘內改了10次,
15分鐘內改了1次。
都會觸發rdb
將備份檔案 (dump.rdb) 移動到 redis 安裝目錄並啟動服務即可
優勢:適合大規模的資料恢復,對資料完整性和一致性要求不高。
劣勢:在一定間隔時間做一次備份,所以如果redis意外down掉的話,就會丟失最後一次快照後的所有修改
總結:在進行rdb的時候,父程序唯一需要做的就是fork出乙個子程序,接下來工作全部由子程序來做,父程序不需要再做其他io操作,所以rdb持久化方式可以最大化redis的效能,與aof相比,在恢復大資料集的時候,rdb方式會更快一些。當然,在fork子程序來儲存資料集到硬碟上的時候,如果資料集比較大,fork過程是非常耗時和耗記憶體空間的。
以日誌的形式來記錄每個寫操作,將redis執行過的所有寫指令記錄下來(讀操作不記錄),只許追加檔案但不可以改寫檔案,redis啟動之初會讀取該檔案重新構建資料,換言之,redis重啟的話就根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作。
aof採用檔案追加方式,檔案會越來越大為避免出現此種情況,新增了重寫機制(rewrite),當aof檔案的大小超過所設定的閾值時,redis就會啟動aof檔案的內容壓縮,只保留可以恢復資料的最小指令集.可以使用命令bgrewriteaof
重寫原理:
aof檔案持續增長而過大時,會fork出一條新程序來將檔案重寫(也是先寫臨時檔案最後再rename),
遍歷新程序的記憶體中資料,每條記錄有一條的set語句。重寫aof檔案的操作,並沒有讀取舊的aof檔案,
而是將整個記憶體中的資料庫內容用命令的方式重寫了乙個新的aof檔案,這點和快照有點類似。
redis會記錄上次重寫時的aof大小,預設配置是當aof檔案大小是上次rewrite後大小的一倍且檔案大於64m時觸發
aof如何恢復和修復資料?
優勢:劣勢:
相同資料集的資料而言aof檔案要遠大於rdb檔案,恢復速度慢於rdb
redis持久化方案 RDB和AOF
redis持久化主要是做災難恢復,資料恢復 redis持久化 rdb,aof 1.rdb持久化機制,對redis中的資料執行週期性的持久化 每隔指定的時間以快照的形式儲存到檔案當中,儲存的是資料檔案 如果我們想要redis僅僅作為純記憶體的快取來用,那麼可以禁止rdb和aof所有的持久化機制 通過r...
Redis 持久化機制(RDB和AOF)
一 rdb也叫snapshotting方式 1 機制 以快照的方式將記憶體中的資料寫入二進位制檔案中,在磁碟中會生成乙個.rdb的檔案。這種方式可以設定每個多長時間進行一次快照,即按照一定的策略週期性的持久化。注意 每次都是將記憶體中的資料完整的寫入磁碟,不是增量的更新。它是非同步的。工作原理簡單介...
Redis的持久化RDB和AOF
rdb 什麼是rdb 在指定時間間隔內,將記憶體中的資料集快照寫入磁碟,也就是snapshot快照,它恢復時是將快照檔案直接讀到記憶體中,來達到恢復資料的。如何持久化 redis會單獨建立 fork 乙個子程序來進行持久化,會先將資料寫進乙個臨時檔案中,等到持久化過程結束了,再用這個臨時檔案替換上次...