Redis持久化RDB與AOF

Redis 持久化方式有哪些?有什么區(qū)別?

RDB:基于快照的持久化,速度更快,一般用作備份,主從復(fù)制也是依賴于rdb持久化功能
AOF:以追加的方式記錄redis操作日志的文件,可以最大程度的保證redis數(shù)據(jù)安全,類似于mysql的binlog

Redis持久化

Redis是一種內(nèi)存型數(shù)據(jù)庫,一旦服務(wù)器進(jìn)程退出,數(shù)據(jù)庫的數(shù)據(jù)就會丟失,為了解決這個問題,Redis提供了兩種持久化的方案,將內(nèi)存中的數(shù)據(jù)保存到磁盤中,避免數(shù)據(jù)的丟失

RDB持久化

redis提供了RDB持久化的功能,這個功能可以將redis在內(nèi)存中的的狀態(tài)保存到硬盤中,它可以手動執(zhí)行。

也可以再redis.conf中配置,定期執(zhí)行。

RDB持久化產(chǎn)生的RDB文件是一個經(jīng)過壓縮的二進(jìn)制文件,這個文件被保存在硬盤中,redis可以通過這個文件還原數(shù)據(jù)庫當(dāng)時的狀態(tài)。

RDB(持久化)

內(nèi)存數(shù)據(jù)保存到磁盤
在指定的時間間隔內(nèi)生成數(shù)據(jù)集的時間點快照(point-in-time snapshot)
優(yōu)點:速度快,適合做備份,主從復(fù)制就是基于RDB持久化功能實現(xiàn)
rdb通過再redis中使用save命令觸發(fā) rdb

rdb配置參數(shù):

dir /data/6379/
dbfilename  dbmp.rdb

每過900秒 有1個操作就進(jìn)行持久化

save 900秒  1個修改類的操作
save 300秒  10個操作
save 60秒  10000個操作

save  900 1
save 300 10
save 60  10000

redis持久化之RDB實踐

1.啟動redis服務(wù)端,準(zhǔn)備配置文件

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379              #定義持久化文件存儲位置
dbfilename  dbmp.rdb        #rdb持久化文件
bind 10.0.0.10  127.0.0.1    #redis綁定地址
requirepass redhat            #redis登錄密碼
save 900 1                    #rdb機制 每900秒 有1個修改記錄
save 300 10                    #每300秒        10個修改記錄
save 60  10000                #每60秒內(nèi)        10000修改記錄

2.啟動redis服務(wù)端

3.登錄redis設(shè)置一個key

redis-cli -a redhat

4.此時檢查目錄,/data/6379底下沒有dbmp.rdb文件

5.通過save觸發(fā)持久化,將數(shù)據(jù)寫入RDB文件

127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> save
OK

Redis持久化之AOF

AOF(append-only log file)
記錄服務(wù)器執(zhí)行的所有變更操作命令(例如set del等),并在服務(wù)器啟動時,通過重新執(zhí)行這些命令來還原數(shù)據(jù)集
AOF 文件中的命令全部以redis協(xié)議的格式保存,新命令追加到文件末尾。
優(yōu)點:最大程序保證數(shù)據(jù)不丟
缺點:日志記錄非常大

redis-client   寫入數(shù)據(jù)  >  redis-server   同步命令   >  AOF文件

配置參數(shù)

AOF持久化配置,兩條參數(shù)

appendonly   yes
appendfsync  always      # 總是修改類的操作
             everysec    # 每秒做一次持久化
             no          # 依賴于系統(tǒng)自帶的緩存大小機制

1.準(zhǔn)備aof配置文件 redis.conf

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename  dbmp.rdb
requirepass redhat
save 900 1
save 300 10
save 60  10000
appendonly yes
appendfsync everysec

2.啟動redis服務(wù)

redis-server /etc/redis.conf

3.檢查redis數(shù)據(jù)目錄/data/6379/是否產(chǎn)生了aof文件

[root@web02 6379]# ls
appendonly.aof  dbmp.rdb  redis.log

4.登錄redis-cli,寫入數(shù)據(jù),實時檢查aof文件信息

[root@web02 6379]# tail -f appendonly.aof

5.設(shè)置新key,檢查aof信息,然后關(guān)閉redis,檢查數(shù)據(jù)是否持久化

redis-cli -a redhat shutdown

redis-server /etc/redis.conf

redis-cli -a redhat

Redis不重啟,切換RDB備份到AOF備份

確保Redis版本在2.2以上

redis-server -v

本文在redis4.0中,通過config set命令,達(dá)到不重啟redis服務(wù),從RDB持久化切換為AOF

實驗環(huán)境準(zhǔn)備

redis.conf服務(wù)端配置文件

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename  dbmp.rdb
save 900 1                    # rdb機制 每900秒 有1個修改記錄
save 300 10                   # 每300秒        10個修改記錄
save 60  10000                # 每60秒內(nèi)        10000修改記錄

啟動Redis服務(wù)端

redis-server redis.conf

登錄redis-cli插入數(shù)據(jù),手動持久化

127.0.0.1:6379> set name chaoge
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set addr shahe
OK
127.0.0.1:6379> save
OK

檢查RDB文件

[root@web02 22:34:16 redis]#ls 6379/
dbmp.rdb  redis.log

備份這個rdb文件,保證數(shù)據(jù)安全

[root@web02 22:35:38 /data/6379]#cp dbmp.rdb /opt/

執(zhí)行命令,開啟AOF持久化

127.0.0.1:6379> CONFIG set appendonly yes   # 開啟AOF功能
OK
127.0.0.1:6379> CONFIG SET save ""          # 關(guān)閉RDB功能
OK

確保數(shù)據(jù)庫的key數(shù)量正確

127.0.0.1:6379> keys *
1) "addr"
2) "age"
3) "name"

確保插入新的key,AOF文件會記錄

127.0.0.1:6379> set title golang
OK

此時RDB已經(jīng)正確切換AOF,注意還得修改redis.conf添加AOF設(shè)置,不然重啟后,通過config set的配置將丟失

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Redis為什么要持久化 我們知道,Redis中的數(shù)據(jù)是緩存在內(nèi)存中的,而一旦機器宕機,內(nèi)存里面的數(shù)據(jù)就會丟失,這...
    woniu95閱讀 207評論 0 0
  • Redis 有兩種持久化方案,RDB (Redis DataBase)和 AOF (Append Only Fil...
    lirensoso閱讀 154評論 0 0
  • Redis持久化 有兩種持久化方式: RDB (Redis DB;默認(rèn)開啟;類比于 HDFS 的 fsimage)...
    積羽沉舟閱讀 982評論 0 1
  • 1、前言 最近在項目中使用到Redis做緩存,方便多個業(yè)務(wù)進(jìn)程之間共享數(shù)據(jù)。由于Redis的數(shù)據(jù)都存放在內(nèi)存中,如...
    第9號當(dāng)鋪閱讀 103評論 0 0
  • 一、RDB 1. RDB介紹 快照持久化也就做RDB持久化。快照持久化的實現(xiàn)方式簡單來說就是:Redis將當(dāng)前內(nèi)存...
    AyunX閱讀 408評論 0 0

友情鏈接更多精彩內(nèi)容