最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis的RDB持久化使用及說明

 更新時(shí)間:2025年12月26日 14:11:50   作者:川貝枇杷膏cbppg  
這篇文章主要介紹了Redis的RDB持久化使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Redis 的 RDB 持久化,本質(zhì)是通過生成內(nèi)存數(shù)據(jù)的快照文件.rdb來保存數(shù)據(jù),Redis 重啟時(shí)加載該文件即可恢復(fù)數(shù)據(jù)。

RDB 是 Redis 默認(rèn)的持久化方式,支持手動觸發(fā)自動觸發(fā)兩種模式,下面從核心機(jī)制、配置、操作步驟、恢復(fù)流程、優(yōu)缺點(diǎn)等方面,詳細(xì)說明如何使用 RDB 持久化。

一、RDB 持久化的核心原理

快照生成邏輯當(dāng)觸發(fā) RDB 持久化時(shí),Redis 會執(zhí)行以下步驟:

  • Redis 主進(jìn)程 fork 一個(gè)子進(jìn)程(父子進(jìn)程共享內(nèi)存數(shù)據(jù));
  • 子進(jìn)程遍歷內(nèi)存中的數(shù)據(jù),將其寫入到一個(gè)臨時(shí)的 RDB 文件中;
  • 子進(jìn)程寫入完成后,用臨時(shí)文件替換舊的 RDB 文件(原子操作,保證文件完整性);
  • 子進(jìn)程退出,主進(jìn)程繼續(xù)處理客戶端請求。

關(guān)鍵:fork 操作會產(chǎn)生 ** 寫時(shí)復(fù)制(Copy-On-Write)** 機(jī)制 —— 父子進(jìn)程共享內(nèi)存頁,只有當(dāng)主進(jìn)程修改數(shù)據(jù)時(shí),才會復(fù)制對應(yīng)內(nèi)存頁,避免占用雙倍內(nèi)存。

RDB 文件特性

  • 文件名默認(rèn)是 dump.rdb,是二進(jìn)制壓縮文件,體積小,便于傳輸和備份;
  • 一個(gè) RDB 文件包含某一時(shí)刻 Redis 的全量數(shù)據(jù)快照,恢復(fù)時(shí)直接加載到內(nèi)存,速度遠(yuǎn)快于 AOF 持久化。

二、RDB 持久化的觸發(fā)方式

RDB 有兩種觸發(fā)方式:手動觸發(fā)(按需執(zhí)行)和自動觸發(fā)(配置規(guī)則自動執(zhí)行)。

手動觸發(fā)(常用)

手動觸發(fā)有兩個(gè)命令:SAVE 和 BGSAVE,生產(chǎn)環(huán)境優(yōu)先使用 BGSAVE

命令執(zhí)行邏輯優(yōu)點(diǎn)缺點(diǎn)適用場景
SAVE主進(jìn)程直接生成 RDB 文件,阻塞所有客戶端請求無需 fork 子進(jìn)程,無內(nèi)存開銷阻塞 Redis,期間無法處理命令測試環(huán)境、數(shù)據(jù)量極小的場景
BGSAVE主進(jìn)程 fork 子進(jìn)程生成 RDB 文件,主進(jìn)程不阻塞不影響 Redis 正常服務(wù)fork 子進(jìn)程會消耗內(nèi)存(大內(nèi)存實(shí)例 fork 較慢)生產(chǎn)環(huán)境、日常備份

實(shí)操示例

# 1. 手動執(zhí)行 BGSAVE(推薦)
127.0.0.1:6379> BGSAVE
Background saving started  # 提示:后臺保存已啟動

# 2. 查看 BGSAVE 執(zhí)行狀態(tài)(通過 INFO 命令)
127.0.0.1:6379> INFO persistence
# Persistence
rdb_changes_since_last_save: 0  # 上次保存后數(shù)據(jù)變化量
rdb_bgsave_in_progress: 0       # 0=未執(zhí)行,1=正在執(zhí)行
rdb_last_save_time: 1719234567  # 上次保存的時(shí)間戳
rdb_last_bgsave_status: ok      # 上次保存狀態(tài):ok=成功,err=失敗

自動觸發(fā)(配置規(guī)則)

通過修改 redis.conf 配置文件,設(shè)置數(shù)據(jù)變化觸發(fā)條件,Redis 會在滿足條件時(shí)自動執(zhí)行 BGSAVE

核心配置項(xiàng)是 save <seconds> <changes>,格式為:save 時(shí)間窗口(秒) 數(shù)據(jù)變化次數(shù),可以配置多個(gè)條件(滿足任意一個(gè)即觸發(fā))。

配置示例(redis.conf)

# 900秒內(nèi)至少1個(gè)鍵被修改 → 觸發(fā) BGSAVE
save 900 1
# 300秒內(nèi)至少10個(gè)鍵被修改 → 觸發(fā) BGSAVE
save 300 10
# 60秒內(nèi)至少10000個(gè)鍵被修改 → 觸發(fā) BGSAVE
save 60 10000

# 禁用自動觸發(fā) RDB(注釋所有 save 配置,或添加下面一行)
# save ""

其他自動觸發(fā)場景

  • 執(zhí)行 FLUSHALL 命令:會清空所有數(shù)據(jù),并生成一個(gè)空的 dump.rdb 文件(生產(chǎn)環(huán)境慎用)。
  • 主從復(fù)制時(shí):主節(jié)點(diǎn)首次向從節(jié)點(diǎn)同步數(shù)據(jù)時(shí),會自動執(zhí)行 BGSAVE 生成 RDB 文件,發(fā)送給從節(jié)點(diǎn)。

三、RDB 持久化的核心配置(redis.conf)

除了 save 觸發(fā)條件,redis.conf 中還有多個(gè)參數(shù)控制 RDB 的行為,關(guān)鍵配置如下:

配置項(xiàng)作用默認(rèn)值示例
dbfilename指定 RDB 文件名dump.rdbdbfilename redis_6379.rdb(按端口命名,便于區(qū)分多實(shí)例)
dir指定 RDB 文件的保存目錄(必須是目錄,不是文件名).(當(dāng)前目錄)dir /var/lib/redis(推薦配置獨(dú)立目錄)
rdbcompression是否壓縮 RDB 文件(LZF 壓縮算法)yesrdbcompression yes(壓縮后文件更小,略增加 CPU 開銷)
rdbchecksum是否對 RDB 文件做校驗(yàn)和(CRC64 算法),保證文件完整性yesrdbchecksum yes(加載時(shí)校驗(yàn),略增加 CPU 開銷)

配置生效步驟

修改 redis.conf 后,重啟 Redis 生效:

redis-server /etc/redis/redis.conf

驗(yàn)證配置:

127.0.0.1:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "redis_6379.rdb"

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis"

四、RDB 持久化的數(shù)據(jù)恢復(fù)流程

Redis 重啟時(shí)會自動加載 RDB 文件恢復(fù)數(shù)據(jù),無需手動操作,恢復(fù)流程如下:

  • Redis 啟動時(shí),檢查 dir 配置的目錄下是否存在 dbfilename 指定的 RDB 文件;
  • 如果存在,加載 RDB 文件到內(nèi)存;如果不存在,啟動后數(shù)據(jù)為空;
  • 加載完成后,Redis 開始接受客戶端請求。

注意:如果 Redis 同時(shí)開啟了 AOF 持久化,則會優(yōu)先加載 AOF 文件(因?yàn)?AOF 數(shù)據(jù)的實(shí)時(shí)性更高)。

驗(yàn)證數(shù)據(jù)恢復(fù)

手動執(zhí)行 BGSAVE 生成 RDB 文件:

127.0.0.1:6379> SET name tom  # 寫入測試數(shù)據(jù)
OK
127.0.0.1:6379> BGSAVE
Background saving started

停止 Redis:

redis-cli shutdown

重啟 Redis,查看數(shù)據(jù)是否恢復(fù):

redis-cli
127.0.0.1:6379> GET name
"tom"  # 數(shù)據(jù)成功恢復(fù)

五、RDB 持久化的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1. 恢復(fù)速度快:RDB 是全量快照文件,Redis 重啟時(shí)直接加載到內(nèi)存,比 AOF 逐行重放命令快得多。
  2. 文件體積小:二進(jìn)制壓縮格式,便于備份、歸檔和傳輸(適合用于定時(shí)備份)。
  3. 對主進(jìn)程影響小BGSAVE 由子進(jìn)程執(zhí)行,主進(jìn)程可以正常處理請求。

缺點(diǎn)

  1. 數(shù)據(jù)安全性低:RDB 是周期性快照,兩次快照之間的數(shù)據(jù)會丟失(比如設(shè)置 save 900 1,如果 Redis 崩潰,最多會丟失 15 分鐘的數(shù)據(jù))。
  2. 大內(nèi)存實(shí)例開銷大fork 子進(jìn)程時(shí),會復(fù)制主進(jìn)程的內(nèi)存頁表,大內(nèi)存實(shí)例(如 10GB 以上)fork 耗時(shí)較長,期間 Redis 可能出現(xiàn)短暫卡頓。
  3. 無法實(shí)時(shí)持久化:不適合對數(shù)據(jù)實(shí)時(shí)性要求高的場景(如金融交易)。

六、RDB 持久化的最佳實(shí)踐(生產(chǎn)環(huán)境)

  1. 配合 AOF 使用:開啟 RDB+AOF 混合持久化(Redis 4.0+ 支持),兼顧 RDB 的恢復(fù)速度和 AOF 的數(shù)據(jù)安全性。
  2. 合理配置 save 參數(shù):避免過于頻繁觸發(fā) BGSAVE(如不要設(shè)置 save 10 1),防止 fork 操作頻繁消耗資源;也不要設(shè)置太寬松(如 save 3600 1),避免數(shù)據(jù)丟失過多。
  3. 定期手動備份 RDB 文件:通過 BGSAVE 生成 RDB 文件后,復(fù)制到其他服務(wù)器或云存儲(如 S3),作為災(zāi)難恢復(fù)的備份。
  4. 控制 Redis 內(nèi)存大小:避免 Redis 內(nèi)存過大(如超過 10GB),減少 fork 時(shí)的內(nèi)存開銷和卡頓時(shí)間。
  5. 監(jiān)控 fork 耗時(shí):通過 INFO stats 查看 latest_fork_usec(上次 fork 耗時(shí),單位微秒),如果耗時(shí)過長(如超過 1 秒),需要優(yōu)化內(nèi)存或調(diào)整持久化策略。

總結(jié)

RDB 持久化是 Redis 的基礎(chǔ)持久化方式,核心是通過快照文件保存全量數(shù)據(jù),使用時(shí)需注意:

  • 手動觸發(fā)用 BGSAVE,避免 SAVE 阻塞主進(jìn)程;
  • 自動觸發(fā)通過 redis.conf 的 save 參數(shù)配置,平衡性能和數(shù)據(jù)安全性;
  • 恢復(fù)時(shí) Redis 自動加載 RDB 文件,AOF 開啟時(shí)優(yōu)先加載 AOF;
  • 生產(chǎn)環(huán)境建議 RDB+AOF 混合持久化,兼顧速度和安全性。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis批量刪除namespace下的數(shù)據(jù)的實(shí)現(xiàn)步驟

    redis批量刪除namespace下的數(shù)據(jù)的實(shí)現(xiàn)步驟

    在開發(fā)中為了更好的管理數(shù)據(jù),對redis進(jìn)行了分組存儲操作,在存值時(shí)加了命名空間來實(shí)現(xiàn),本文就來介紹一下redis批量刪除namespace下的數(shù)據(jù)的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2025-12-12
  • Linux下redis5.0.5的安裝過程與配置方法

    Linux下redis5.0.5的安裝過程與配置方法

    這篇文章主要介紹了Linux下redis5.0.5的安裝過程與配置方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Redis鍵值設(shè)計(jì)的具體實(shí)現(xiàn)

    Redis鍵值設(shè)計(jì)的具體實(shí)現(xiàn)

    本文主要介紹了Redis鍵值設(shè)計(jì)的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Redis類型type與編碼encoding原理及使用示例

    Redis類型type與編碼encoding原理及使用示例

    這篇文章主要為大家介紹了Redis類型type與編碼encoding原理及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 在Centos?8.0中安裝Redis服務(wù)器的教程詳解

    在Centos?8.0中安裝Redis服務(wù)器的教程詳解

    由于考慮到linux服務(wù)器的性能,所以經(jīng)常需要把一些中間件安裝在linux服務(wù)上,今天通過本文給大家介紹下在Centos?8.0中安裝Redis服務(wù)器的詳細(xì)過程,感興趣的朋友一起看看吧
    2022-03-03
  • 基于Redis的分布式鎖及原子性問題(短視頻開發(fā))

    基于Redis的分布式鎖及原子性問題(短視頻開發(fā))

    短視頻開發(fā)中,Redis分布式鎖通過SETNX實(shí)現(xiàn)加鎖與解鎖,需設(shè)置超時(shí)時(shí)間避免死鎖,為防止誤刪,釋放鎖時(shí)需判斷線程身份,并用Lua腳本保證原子性,確保安全操作,本文給大家介紹基于Redis的分布式鎖及原子性問題,感興趣的朋友一起看看吧
    2025-06-06
  • redislive監(jiān)控redis服務(wù)的圖文教程_動力節(jié)點(diǎn)Java 學(xué)院整理

    redislive監(jiān)控redis服務(wù)的圖文教程_動力節(jié)點(diǎn)Java 學(xué)院整理

    這篇文章主要介紹了redislive監(jiān)控redis服務(wù)的圖文教程_動力節(jié)點(diǎn)Java 學(xué)院整理,需要的朋友可以參考下
    2017-08-08
  • 淺談我是如何用redis做實(shí)時(shí)訂閱推送的

    淺談我是如何用redis做實(shí)時(shí)訂閱推送的

    這篇文章主要介紹了淺談我是如何用redis做實(shí)時(shí)訂閱推送的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Redis高并發(fā)場景下秒殺超賣解決方案(秒殺場景)

    Redis高并發(fā)場景下秒殺超賣解決方案(秒殺場景)

    早起的12306購票,剛被開發(fā)出來使用的時(shí)候,12306會經(jīng)常出現(xiàn)超賣 這種現(xiàn)象,也就是說車票只剩10張了,卻被20個(gè)人買到了,這種現(xiàn)象就是超賣,今天通過本文給大家介紹Redis高并發(fā)場景下秒殺超賣解決方案,感興趣的朋友一起看看吧
    2022-04-04
  • Redis中的GEO詳解

    Redis中的GEO詳解

    Redis GEO是一個(gè)輕量級的地理位置解決方案,適合需要快速存儲和查詢位置數(shù)據(jù)的場景,本文給大家介紹Redis的GEO詳解,感興趣的朋友一起看看吧
    2025-06-06

最新評論

旅游| 瑞丽市| 孟村| 原平市| 济阳县| 嵩明县| 平果县| 吴川市| 小金县| 古蔺县| 海安县| 余干县| 武冈市| 西吉县| 云安县| 无锡市| 信丰县| 镇沅| 卓资县| 遂昌县| 日喀则市| 贺兰县| 梓潼县| 昌宁县| 皋兰县| 青阳县| 雷州市| 汉川市| 恩平市| 淅川县| 襄樊市| 来安县| 临桂县| 岑巩县| 大新县| 绥棱县| 通榆县| 临海市| 大安市| 黄骅市| 吴旗县|