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