Linux下redis的持久化RDB和AOF


redis的持久化

redis十一種內存性數據庫, 一旦服務器進程退出, 數據庫的數據就會丟失, 為了解決這個問題, redis提供了兩種持久化的方案, 將內存中的數據保存到哦磁盤中, 避免數據的丟失。

RDB和aof持久化的區別 :

  rdb是基於快照的持久化, 速度更快, 一般用於備份, 主從復制也是依賴於rdb持久化功能

  aof是以追加的方式記錄redis操作日志的文件, 可以最大程度的保證redis數據安全, 類似於mysql的binlog.

RDB持久化 :

  redis提供了RDB持久化的功能, 這個功能可以將redis在內存中的狀態保存到硬盤中, 他可以手動執行。

  也可以在redis.conf中配置, 定期執行.

  RDB持久化產生的RDB文件是一個經過壓縮的二進制文件, 這個文件被保存在硬盤中, redis可以通過這個文件還原數據庫當時的狀態.

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


rdb配置參數:

dir /data/6379/
dbfilename  dbmp.rdb

每過900秒 有1個操作就進行持久化

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

save  900 1
save 300 10
save 60  10000

 


 

RDB持久化流程

1. RDB持久化redis服務端配置 :

daemonize yes    # 后台運行redis-server
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秒內        10000修改記錄

2. 啟動redis服務端

3. 登錄redis設置一個key :

redis-cli -a redhat
---------------------------------------
# -a 參數表示auth驗證密碼

4. 檢查目錄/data/6379地下有沒有dbmp.rdb文件

5. 通過save觸發持久化, 將數據寫入dbmp.rdb文件

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

 


 

AOF持久化

AOF(append-only log file) :

  記錄服務器執行的所有變更命令(例如set del等), 並在服務器啟動時, 通過重新執行這些命令來還原數據集

  AOF文件中的命令全部以redis協議的格式保存, 新命令追加到文件末尾。

    優點: 最大程序保證數據不丟

    缺點: 日志記錄非常大

AOF配置參數 :

AOF持久化配置,兩條參數

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

在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

啟動redis服務 :

redis-server redis.conf
------------------------------------------------
# 想要redis.conf內的配置全部生效, 需要在啟動redis-server是加上redis.conf參數

檢查redis數據目錄/data/6379/是否產生了aof文件 :

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

登錄redis-cli, 寫入數據, 實時檢查aof文件信息 :

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

設置新key, 檢查aof信息, 然后關閉redis, 檢查數據是否持久化 :

redis-cli -a redhat shutdown

redis-server /etc/redis.conf

redis-cli -a redhat

 


 

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

此操作是基於redis2.2版本以上, 通過config set命令, 達到不重啟redis服務, 從RDB持久話切換到AOF

檢查redis版本 :

redis-sserver -v

實驗環境准備 :

  redis.conf服務端配置文件

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秒內        10000修改記錄

啟動redis服務端 :

redis-server redis.conf

登錄redis-cli插入數據, 手動持久化 :

127.0.0.1:6379> set name xd
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set addr hd
OK
127.0.0.1:6379> save
OK

檢查RDB文件 :

ls /data/6379

備份這個rdb文件, 保證數據安全 :

cp dbmp.rdb /tmp/

執行命令, 開啟AOF持久化 :

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

確保數據庫的key數量正確 :

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

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

127.0.0.1:6379> set title golang
OK

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM