Redis的持久化方式
一、概述
Redis提供了不同的持久性選項(xiàng):
RDB持久性按指定的時(shí)間間隔執(zhí)行數(shù)據(jù)集的時(shí)間點(diǎn)快照。
AOF持久性會(huì)記錄服務(wù)器接收的每個(gè)寫(xiě)入操作,這些操作將在服務(wù)器啟動(dòng)時(shí)再次播放,以重建原始數(shù)據(jù)集。使用與Redis協(xié)議本身相同的格式記錄命令,并且僅采用追加方式。當(dāng)日志太大時(shí),Redis可以在后臺(tái)重寫(xiě)日志。
如果您希望,只要您的數(shù)據(jù)在服務(wù)器運(yùn)行時(shí)就一直存在,則可以完全禁用持久性。
可以在同一實(shí)例中同時(shí)合并AOF和RDB。請(qǐng)注意,在這種情況下,Redis重新啟動(dòng)時(shí),AOF文件將用于重建原始數(shù)據(jù)集,因?yàn)樗梢员WC是最完整的。
Redis提供了不同的持久性方式,即為RDB和AOF兩種持久化方式,RDB持久化是指,在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集寫(xiě)入到磁盤(pán)中,這個(gè)時(shí)間間隔可以在配置文件中手動(dòng)配置,而AOF持久化則記錄的時(shí)每個(gè)寫(xiě)入的操作而不是數(shù)據(jù)集,在恢復(fù)數(shù)據(jù)時(shí),在服務(wù)器啟動(dòng)時(shí)再一次執(zhí)行寫(xiě)入操作,重新建立數(shù)據(jù),為了避免AOF文件會(huì)越來(lái)越大,AOF采用文件追加的方式,當(dāng)AOF的大小超過(guò)所設(shè)定的閾值時(shí),redis會(huì)啟動(dòng)AOF的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集。
在redis中同時(shí)開(kāi)啟AOF和RDB兩種持久化方式,redis默認(rèn)優(yōu)先取AOF的數(shù)據(jù)。
二、Redis持久化–RDB
1、RDB的保存文件和保存路徑
在redis的redis.conf可以指定RDB保存文件名字,文件名以.rdb結(jié)尾,如下圖dump.rdb??梢栽趓edis.conf中指定,RDB文件的保存路徑,如下圖RDB文件將會(huì)保存在/opt/myRedis/redis_dbfile/目錄下
2、RDB的保存策略
- 保存策略一
自動(dòng)備份規(guī)則(滿足以下三種條件其中之一則生成rdb文件)
save 900 1 #900秒內(nèi)完成1次對(duì)數(shù)據(jù)的改變 save 300 10 #300秒內(nèi)完成1次對(duì)數(shù)據(jù)的改變 save 60 10000 #一分鐘內(nèi)完成1次對(duì)數(shù)據(jù)的改變
- 保存策略二
正常關(guān)閉redis觸發(fā)持久化,如使用shutdown命令關(guān)閉redis(shutdown),如下圖:
3、RDB持久相關(guān)配置(在redis.conf配置文件中)
stop-writes-on-bgsave-error yes 后臺(tái)存儲(chǔ)存儲(chǔ)發(fā)生錯(cuò)誤時(shí)禁止寫(xiě)入
- 默認(rèn)為yesrdbcompression yes 啟動(dòng)rdb文件壓縮,耗費(fèi)CPU資源
- 默認(rèn)為yesrdbchecksum yes 對(duì)rdb數(shù)據(jù)進(jìn)行校驗(yàn),耗費(fèi)CPU資源
- 默認(rèn)為yesdbfilename dump.rdb rdb文件名稱dir ./ rdb文件保存目錄
4、RDB的備份與恢復(fù)
RDB的備份
先通過(guò)config get dir 查詢到rdb文件的目錄,然后再將*.rdb文件拷貝到別的地方,簡(jiǎn)單來(lái)說(shuō)就是找到你需要備份的rdb文件,然后拷貝就完成了rdb的備份
RDB的恢復(fù)
- a.關(guān)閉redis
- b.把rdb文件放到redis的工作目錄下
- c.啟動(dòng)redis,備份的數(shù)據(jù)就會(huì)直接加載
5、RDB的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
節(jié)省磁盤(pán)空間恢復(fù)數(shù)據(jù)速度快
缺點(diǎn):
雖然redis在持久化創(chuàng)建一個(gè)子線程進(jìn)行持久化,并且使用了“寫(xiě)時(shí)復(fù)制”技術(shù),但是如果數(shù)據(jù)足夠龐大還是比較消耗性能的。
在一定間隔時(shí)間做一次備份,所以如果redis意外down掉的話,就會(huì)丟失最后一次快照后的所有修改
三、Redis持久化–AOF
1、AOF的保存文件和保存路徑
AOF默認(rèn)是不開(kāi)啟的,需要在配置文件中手動(dòng)配置,如下圖在redis.conf中將appendonly設(shè)置為yes表示開(kāi)啟AOF持久化,appendfilename參數(shù)表示AOF保存文件,AOF文件保存路徑和RDB文件保存路徑一致,即設(shè)置dir參數(shù)
2、AOF的保存策略
在配置文件中設(shè)置AOF保存策略,當(dāng)appendfsync屬性設(shè)置為always表示每次redis的寫(xiě)入都會(huì)被記入日志;
everysec表示每秒記入日志一次,如果宕機(jī),本秒的數(shù)據(jù)可能丟失;
no表示不主動(dòng)記入
3、AOF的重寫(xiě)機(jī)制
AOF是通過(guò)記錄redis的寫(xiě)入命令來(lái)實(shí)現(xiàn)持久化的,在恢復(fù)數(shù)據(jù)時(shí),在服務(wù)器啟動(dòng)時(shí)再一次執(zhí)行寫(xiě)入操作,重新建立數(shù)據(jù),所以問(wèn)題就誕生了,AOF文件的大小隨著時(shí)間的流逝一定會(huì)越來(lái)越大,大大影響了redis服務(wù)器的性能,避免出現(xiàn)此種情況,AOF新增了重寫(xiě)機(jī)制,當(dāng)AOF文件的大小超過(guò)所設(shè)定的閾值時(shí),Redis就會(huì)啟動(dòng)AOF文件的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集.如下圖實(shí)例,AOF用一條rpush list “B” “D” “E” “F” “G” “a” "b"代替前面的5條命令。
4、AOF的備份與恢復(fù)
AOF的備份和恢復(fù)和RDB的備份和恢復(fù)操作一致,都是拷貝備份文件,需要恢復(fù)時(shí)將備份文件放到redis的工作目錄下,啟動(dòng)系統(tǒng)即加載數(shù)據(jù)。
注意:當(dāng)AOF和RDB同時(shí)開(kāi)啟時(shí),系統(tǒng)默認(rèn)取AOF的數(shù)據(jù)。
5、AOF的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
備份機(jī)制更健壯,丟失數(shù)據(jù)的概率更低可讀的持久化日志文本,通過(guò)操作AOF穩(wěn)健,可以處理誤操作
缺點(diǎn):
比起RDB占用更多的磁盤(pán)空間恢復(fù)數(shù)據(jù)比RDB慢每次讀寫(xiě)都寫(xiě)入AOF的話,有一定的性能壓力存在個(gè)別bug,造成恢復(fù)不能
四、兩種持久化方式如何選型
1、官方推薦兩個(gè)都使用
2、如果對(duì)數(shù)據(jù)不敏感,可以選單獨(dú)用RDB
3、不建議單獨(dú)使用AOF,因?yàn)闀?huì)出現(xiàn)個(gè)別bug
4、如果只是做純內(nèi)存緩存,可以都不用
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis瞬時(shí)高并發(fā)秒殺方案總結(jié)
本文講述了Redis瞬時(shí)高并發(fā)秒殺方案總結(jié),具有很好的參考價(jià)值,感興趣的小伙伴們可以參考一下,具體如下:2018-05-05Redis常用的數(shù)據(jù)結(jié)構(gòu)及實(shí)際應(yīng)用場(chǎng)景
本文介紹了Redis中常用的數(shù)據(jù)結(jié)構(gòu),包括字符串、列表、集合、哈希表、有序集合和Bitmap,并詳細(xì)說(shuō)明了它們?cè)诟鞣N場(chǎng)景下的使用,需要的朋友可以參考下2024-05-05Redis常見(jiàn)數(shù)據(jù)類(lèi)型List列表使用詳解
Redis的List是一種有序的字符串集合,支持兩端高效插入和刪除,適用于隊(duì)列和棧,這篇文章主要介紹了Redis常見(jiàn)數(shù)據(jù)類(lèi)型List列表使用的相關(guān)資料,需要的朋友可以參考下2024-12-12Redis存儲(chǔ)的列表分頁(yè)和檢索的實(shí)現(xiàn)方法
在 Redis 中,列表(List)是一種有序的數(shù)據(jù)結(jié)構(gòu),通常用于存儲(chǔ)一系列元素,由于列表是有序的,可以通過(guò)索引來(lái)訪問(wèn)元素,因此可以很方便地實(shí)現(xiàn)分頁(yè)和檢索功能,以下是 Redis 列表的分頁(yè)和檢索的實(shí)現(xiàn)方法,需要的朋友可以參考下2025-02-02