Redis RDB、AOF持久化详解
概述
Redis 提供了2種不同的持久化方式,分別為RDB和AOF
- RDB能夠定時地對數(shù)據(jù)進(jìn)行快照存儲,因為是定時的,所以服務(wù)宕機(jī)時存在丟失數(shù)據(jù)的風(fēng)險
- AOF能夠記錄每一次的寫操作,當(dāng)服務(wù)重啟的時候會重新執(zhí)行這些命令來恢復(fù)數(shù)據(jù),恢復(fù)完整度高,但是比較耗時
- Redis服務(wù)啟動時,根據(jù)配置的持久化方式來決定加載RDB或者AOF恢復(fù)數(shù)據(jù)。如果2種持久化都開啟,則優(yōu)先加載AOF
RDB
RDB 相關(guān)配置
# save <seconds> <changes> # 在900秒內(nèi)保存1次、300秒內(nèi)保存10次、60秒內(nèi)保存10000次,這些條件符合其中一個就會觸發(fā)RDB快照保存 save 900 1 save 300 10 save 60 10000# RDB快照存儲失敗時,是否停止接收新的寫入操作 stop-writes-on-bgsave-error yes# 是否開啟RDS快照文件的壓縮存儲(不開啟會導(dǎo)致dump.rdb文件過大) rdbcompression yes# 對RDB格式進(jìn)行校驗,但是在加載或保存RDB文件時有10%的性能損耗 rdbchecksum yes# RDB快照文件名 dbfilename dump.rdb# 存放RDB、AOF文件的目錄 dir /usr/local/redis-5.0.8/dataRDB 詳解
- 如果Redis服務(wù)是正常退出,會自動保存最新數(shù)據(jù)到rdb,然后再退出服務(wù)
- 如果Redis服務(wù)是異常中斷,例如kill命令直接終止,則不會觸發(fā)RDB快照保存
- 在保存RDB文件時,父進(jìn)程會fork出一個子進(jìn)程來處理,然后父進(jìn)程不需要再做其他IO操作。
- 在恢復(fù)大的數(shù)據(jù)集時,RDB會比AOF更快
AOF
AOF 相關(guān)配置
# 是否開啟AOF持久化 appendonly no # AOF持久化文件名 appendfilename "appendonly.aof"# 持久化策略。 # always:每次寫入數(shù)據(jù)分別觸發(fā)持久化,并完成磁盤同步 # everysec:每秒持久化一次,并完成磁盤同步(推薦) # no:將數(shù)據(jù)交給操作系統(tǒng)處理,更快,也更不安全 appendfsync everysec# 當(dāng)AOF文件正在rewrite時,是否停止appendfsync操作 # no:不停止,也就是追加操作照常進(jìn)行 # yes:停止,不進(jìn)行追加操作,而只是將其放在緩沖區(qū) no-appendfsync-on-rewrite no# AOF文件增大一定的比例后(percentage),自動觸發(fā)重寫機(jī)制bgrewriteaof # 只有當(dāng)文件超過一定的大小(min-size),bgrewriteaof才會執(zhí)行,避免文件很小的時候一直反復(fù)的rewrite auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mbAOF 文件重寫機(jī)制
AOF的機(jī)制是不斷地將寫命令追加到文件末尾,隨著日積月累文件會變得越來越大,這時就需要一個重寫機(jī)制來處理。
例如:你對1個數(shù)值進(jìn)行INCR遞增100次,AOF記錄了100次INCR命令,實際上只需要1條SET命令就能保存最新的值了。
為了處理這種情況,AOF重寫機(jī)制(bgrewriteaof)會創(chuàng)建1個新的AOF文件,包含了重建當(dāng)前數(shù)據(jù)所需要的最少命令,創(chuàng)建完畢后直接替換掉原文件。
AOF 文件損壞處理
服務(wù)器宕機(jī)時可能導(dǎo)致AOF文件損壞,此時在Redis重啟時不會加載這個AOF文件。這種情況下,可以通過以下方式處理:
RDB切換到AOF
假設(shè)Redis當(dāng)前使用的是RDB,并且有了一定的數(shù)據(jù)量,這時候想啟用AOF時,應(yīng)該怎么操作呢?
方法一
直接修改redis.conf文件,把a(bǔ)ppendonly改成yes,然后重啟redis。
注意:這時原數(shù)據(jù)將被全部清空
注意:這時原數(shù)據(jù)將被全部清空
注意:這時原數(shù)據(jù)將被全部清空
方法二
通過redis-cli連接redis,執(zhí)行命令進(jìn)行設(shè)置,這時將直接啟用aof,并將當(dāng)前的數(shù)據(jù)寫入到appendonly.aof文件。
CONFIG SET appendonly yes注意:redis.conf記得同步設(shè)置appendonly yes,否則下次重啟aof不會啟用
總結(jié)
以上是生活随笔為你收集整理的Redis RDB、AOF持久化详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux安装Redis完整步骤
- 下一篇: Logstash同步mysql一对多数据