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