Redis 持久化 RDB 與 AOF的執(zhí)行過程
前言
Redis 持久化支持兩種方式 RDB 與 AOF,文章記錄兩者的執(zhí)行過程與配置。
一、RDB
RDB 持久化是把當(dāng)前進(jìn)程數(shù)據(jù)生成快照保存到硬盤的過程,觸發(fā) RDB 持久化過程分為手動(dòng)觸發(fā)和自動(dòng)觸發(fā)。
1. save 命令
會(huì)堵塞當(dāng)前 Redis 服務(wù)器,直到 RDB 結(jié)束為止,對(duì)數(shù)據(jù)量較大或者內(nèi)存較大的實(shí)例,會(huì)堵塞較長(zhǎng)時(shí)間,生產(chǎn)環(huán)境不建議使用。如果手動(dòng)執(zhí)行 save 命令,Redis 會(huì)記錄下方日志。
127.0.0.1:6379> save
OK
* DB saved on disk
2. bgsave 命令
Redis 進(jìn)程執(zhí)行 fork 操作創(chuàng)建子進(jìn)程,RDB 持久化過程由子進(jìn)程負(fù)責(zé),完成后自動(dòng)結(jié)束。阻塞只發(fā)生在 fork 階段,一般時(shí)間很短。如果手動(dòng)執(zhí)行 bgsave 命令,Redis 會(huì)記錄下方日志。
* Background saving started by pid 90338
* DB saved on disk
* RDB: 0 MB of memory used by copy-on-write
* Background saving terminated with success
bgsave 對(duì) save 堵塞進(jìn)行優(yōu)化,Redis 內(nèi)部涉及 RDB 操作都是由 bgsave 完成。
3. 內(nèi)部觸發(fā) RDB 場(chǎng)景
- 使用 save 相關(guān)配置,如
save m n
表示 m 秒內(nèi)數(shù)據(jù)集存在 n 次修改時(shí),觸發(fā)一次 RDB; - 從節(jié)點(diǎn)執(zhí)行全量復(fù)制操作,主節(jié)點(diǎn)自動(dòng)執(zhí)行 bgsave 生成 RDB 文件發(fā)送給從節(jié)點(diǎn);
- 執(zhí)行 debug relad 重新加載 Redis 時(shí),也會(huì)觸發(fā)生產(chǎn) RDB;
- 默認(rèn)情況下,執(zhí)行 shutdown 關(guān)閉 Redis 時(shí),如果沒有開啟 AOF 持久化功能,則會(huì)觸發(fā) RDB。
4. RDB 參數(shù)配置
通過設(shè)置 dir 可以配置 RDB 保存位置 dbfilename 可以設(shè)置文件名。
config set dir /opt/redis-5.0.12/backup
config set dbfilename myback.rdb
Redis 默認(rèn)采用 LZF 算法對(duì)生成的RDB文件做壓縮處理,壓縮后的文件遠(yuǎn)遠(yuǎn)小于內(nèi)存大小,默認(rèn)開啟
,可以通過 rdbcompression 參數(shù)配置。
config set rdbcompression{yes|no}
壓縮 RDB 雖然會(huì)消耗 CPU 但是可以大幅度減少文件體積,方便存儲(chǔ)或通過網(wǎng)絡(luò)發(fā)送給從節(jié)點(diǎn)。
5. RDB 缺點(diǎn)
RDB 方式數(shù)據(jù)沒辦法做到實(shí)時(shí)持久化/秒級(jí)持久化。因?yàn)?bgsave 每次運(yùn)行都要執(zhí)行 fork 操作創(chuàng)建子進(jìn)程,屬于重量級(jí)操作,頻繁執(zhí)行成本過高。
RDB文件使用特定二進(jìn)制格式保存,Redis 版本演進(jìn)過程中有多個(gè)格式的 RDB 版本,存在老版本 Redis 服務(wù)無法兼容新版 RDB 格式的問題。
二、AOF
AOF(appendonlyfile)持久化:以獨(dú)立日志的方式記錄每次寫命令,重啟時(shí)再重新執(zhí)行 AOF 文件中的命令達(dá)到恢復(fù)數(shù)據(jù)的目的。AOF 的主要作用是解決了數(shù)據(jù)持久化的實(shí)時(shí)性,目前已經(jīng)是 Redis 持久化的主流方式。
1. 參數(shù)配置
# 配置開啟 AOF config set appendonly yes # 配置文件名,默認(rèn) appendonly.aof config set appendfilename xxx.aof # 存儲(chǔ)位置配置,與 RDB 一樣 config set dir /opt/redis-5.0.12/backup
2. AOF 執(zhí)行流程
- 所有的命令都會(huì)追加到 aof_buf(緩沖區(qū))中;
- AOF 緩沖區(qū)根據(jù)對(duì)應(yīng)的策略向磁盤同步操作;
- 隨著 AOF 文件越來越大,需要定期對(duì) AOF 重寫,達(dá)到壓縮目的;
- 當(dāng) Redis 服務(wù)器重啟時(shí),可以加載AOF文件進(jìn)行數(shù)據(jù)恢復(fù)。
3. 重寫機(jī)制
手動(dòng)觸發(fā):
bgrewriteaof
自動(dòng)觸發(fā),根據(jù)下方兩個(gè)參數(shù)設(shè)置自動(dòng)觸發(fā)機(jī)制:
auto-aof-rewrite-min-size
auto-aof-rewrite-percentage
到此這篇關(guān)于Redis 持久化 RDB 與 AOF的文章就介紹到這了,更多相關(guān)Redis 持久化 RDB 與 AOF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文搞懂阿里云服務(wù)器部署Redis并整合Spring?Boot
這篇文章主要介紹了一文搞懂阿里云服務(wù)器部署Redis并整合Spring?Boot,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Linux中設(shè)置Redis開機(jī)啟動(dòng)的方法
這篇文章主要給大家介紹了關(guān)于Linux中設(shè)置Redis開機(jī)啟動(dòng)的方法,主要包括在CentOS7.0系統(tǒng)和Debian 8.0系統(tǒng)下實(shí)現(xiàn)方法,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04Redis中的String類型及使用Redis解決訂單秒殺超賣問題
這篇文章主要介紹了Redis中的String類型及使用Redis解決訂單秒殺超賣問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Redis之常用數(shù)據(jù)結(jié)構(gòu)哈希表
這篇文章主要介紹了Redis常用的數(shù)據(jù)結(jié)構(gòu)哈希表,哈希表是一種保存鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),具有一定的參考價(jià)值,需要的朋友可以參考閱讀2023-04-04Redis如何使用Pipeline實(shí)現(xiàn)批處理操作
Redis?Pipeline?是一種優(yōu)化?Redis?操作的機(jī)制,通過將多個(gè)命令打包發(fā)送到?Redis?服務(wù)器,減少客戶端與服務(wù)器之間的網(wǎng)絡(luò)往返時(shí)間,本文主要來聊聊Redis如何使用Pipeline實(shí)現(xiàn)批處理操作,需要的可以了解下2025-02-02Redis安裝啟動(dòng)及常見數(shù)據(jù)類型
這篇文章主要介紹了Redis安裝啟動(dòng)及常見數(shù)據(jù)類型,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04