redis的兩種持久化方式RDB和AOF解讀
redis兩種持久化方式RDB和AOF
Redis 提供了兩種主要的持久化方式:RDB(Redis Database)和 AOF(Append Only File)。
默認情況下,Redis 沒有開啟任何持久化方式,但可以在配置文件(redis.conf)中啟用它們。
RDB持久化
RDB 是一種快照持久化方式,它會在指定的時間間隔內(nèi)生成內(nèi)存數(shù)據(jù)的快照并保存到磁盤上的一個 RDB 文件中,RDB 快照(Snapshot)機制在每次觸發(fā)快照保存時,都會生成一個新的 RDB 文件,這個新文件會覆蓋之前保存的 RDB 文件。
以下是 RDB 快照機制的一些關(guān)鍵點:
1、開啟/禁用方式
在配置文件的SNAPSHOTTING(快照)模塊中設(shè)置save參數(shù)即可開啟,相應(yīng)的禁用RDB持久化只需要不設(shè)置save指令或給save傳入一個空字符串即可禁用。
2、觸發(fā)機制
- 達到配置文件中save指令指定的觸發(fā)條件
- 通過
SAVE
或BGSAVE(異步執(zhí)行)
命令觸發(fā)
3、參數(shù)配置
#900秒內(nèi)有一個key發(fā)生變化觸發(fā)快照操作 save 900 1 #300秒內(nèi)有10個key發(fā)生變化觸發(fā)快照操作 save 300 10 # 60秒內(nèi)有10000個key發(fā)生變化觸發(fā)快照操作 save 60 10000 # 如果配置成no,表示你不在乎數(shù)據(jù)不一致或者有其他的手段發(fā)現(xiàn)和控制這種不一致,那么在快照寫入失敗時,也能確保redis繼續(xù)接受新的寫請求 stop-writes-on-bgsave-error yes #rdb快照是否進行壓縮,但是會消耗cpu rdbcompression yes # 在存儲快照后,還可以讓redis使用CRC64算法來進行數(shù)據(jù)校驗,但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關(guān)閉此功能 rdbchecksum yes # rdb快照文件名 dbfilename dump.rdb #存儲位置,默認是當(dāng)前路徑 dir ./
4、數(shù)據(jù)安全性
- 由于 RDB 文件會覆蓋舊文件,因此在故障恢復(fù)時,你只能恢復(fù)到最后一次成功快照的時間點的數(shù)據(jù)狀態(tài)。
- 為了提高數(shù)據(jù)安全性,通常建議結(jié)合使用 AOF(Append Only File)持久化,這樣即使 RDB 文件丟失,AOF 也可以提供更細粒度的數(shù)據(jù)恢復(fù)。
AOF持久化
AOF 是一種日志持久化方式,它會記錄每次寫操作并追加到 AOF 文件中,Redis的AOF文件在重寫(rewrite)過程中會被覆蓋。
AOF重寫的目的是為了減少AOF文件的大小,并去除那些冗余的、不再必要的命令,使得該文件只包含恢復(fù)當(dāng)前數(shù)據(jù)集所需的最小命令集。
在重寫工作完成后,Redis會將新的AOF文件覆蓋現(xiàn)有的AOF文件,這就相當(dāng)于壓縮了AOF文件,使得AOF文件體積變小了。
以下是 AOF日志機制的一些關(guān)鍵點:
1、開啟/禁用方式
在配置文件的APPEND ONLY MODE模塊中把appendonly參數(shù)設(shè)置為yes即可開啟,設(shè)置為no即禁用。
2、觸發(fā)機制
每次寫操作都會追加到 AOF 文件中。
3、參數(shù)配置
#開啟aof持久化策略,將接收到的每次寫操作請求都追加到aof文件中,在redis重啟時,會加載aof文件,優(yōu)先級比rdb高 appendonly no # aof文件名 appendfilename "appendonly.aof" # 設(shè)置aof持久化頻率 # 有三種選擇 # always 每次寫都強制調(diào)用fsync,這種模式下,redis會相對較慢,但數(shù)據(jù)最安全 # everysec 每秒啟用一次fsync # no 不調(diào)用fsync()。而是讓操作系統(tǒng)自行決定sync的時間。這種模式下,redis的性能會最快 appendfsync everysec # 設(shè)置當(dāng)redis在rewrite的時候,是否允許appendsync。因為redis進程在進行AOF重寫的時候,fsync()在主進程中的調(diào)用會被阻止,也就是redis的持久化功能暫時失效。默認為no,這樣能保證數(shù)據(jù)安全 no-appendfsync-on-rewrite no # 設(shè)置自動進行AOF重寫的基準值,也就是重寫啟動時的AOF文件大小,假如redis自啟動至今還沒有進行過重寫,那么啟動時aof文件的大小會被作為基準值。這個基準值會和當(dāng)前的aof大小進行比較。如果當(dāng)前aof大小超出所設(shè)置的增長比例,則會觸發(fā)重寫。如果設(shè)置auto-aof-rewrite-percentage為0,則會關(guān)閉此重寫功能 auto-aof-rewrite-percentage 100 # 設(shè)置一個最小大小,是為了防止在aof很小時就觸發(fā)重寫 auto-aof-rewrite-min-size 64mb
4、數(shù)據(jù)安全性
AOF文件會記錄從上一次重寫到現(xiàn)在的所有寫操作,redis故障恢復(fù)后會重新執(zhí)行這些寫操作指令,設(shè)置了過期時間的key也會被重新寫入并重新設(shè)置過期時間,從而恢復(fù)到故障前的數(shù)據(jù)狀態(tài)
5、補充
AOF文件重寫可以簡單的理解為redis會自動的根據(jù)重寫機制配置去定時的清理那些冗余的、不再必要的命令,僅保留當(dāng)前使用中的數(shù)據(jù)命令,由此可以減少AOF文件的體積,減少磁盤空間使用率以及提高數(shù)據(jù)恢復(fù)的速度。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis連接失?。嚎蛻舳薎P不在白名單中的問題分析與解決方案
在現(xiàn)代分布式系統(tǒng)中,Redis作為一種高性能的內(nèi)存數(shù)據(jù)庫,被廣泛應(yīng)用于緩存、消息隊列、會話存儲等場景,然而,在實際使用過程中,我們可能會遇到各種連接問題,其中“客戶端IP不在白名單中”是一個常見的錯誤,本文將從錯誤分析、原因排查、解決方案等詳細探討如何解決這一問題2025-01-01redis-cli登錄遠程redis服務(wù)并批量導(dǎo)入數(shù)據(jù)
本文主要介紹了redis-cli登錄遠程redis服務(wù)并批量導(dǎo)入數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10SpringBoot3+Redis實現(xiàn)分布式鎖的配置方法
這篇文章主要介紹了SpringBoot3+Redis實現(xiàn)分布式鎖,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-07-07redis使用不當(dāng)導(dǎo)致應(yīng)用卡死bug的過程解析
本文主要記一次找因redis使用不當(dāng)導(dǎo)致應(yīng)用卡死bug的過程,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07