Linux - redis持久化RDB與AOF

Linux - redis持久化RDB與AOF

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

rdb:基於快照的持久化,速度更快,通常用做備份,主從複製也是依賴於rdb持久化功能

aof:以追加的方式記錄redis操做日誌的文件。能夠最大程度的保證redis數據安全,相似於mysql的binlog

RDB持久化

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

也能夠再redis.conf中配置,按期執行。web

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

RDB(持久化)
內存數據保存到磁盤
在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)sql

優勢:速度快,適合作備份,主從複製就是基於RDB持久化功能實現
rdb經過再redis中使用save命令觸發 rdb數據庫

rdb模式持久化:緩存

第一步,準備一個redis配置文件,  rdbredis.conf  
   寫入以下內容

daemonize yes           #後臺運行redis 

port 6379           #redis端口 

logfile /data/6379/redis.log        #redis日誌文件位置

dir /data/6379/            #指定redis數據文件夾放在哪 

dbfilename  s17dump.rdb           #指定rdb的數據文件    

bind 0.0.0.0

requirepass redhat              #指定redis的密碼    

save 900 1                  #表明  900秒內 有1個修改key的操做,就進行持久化       

save 300 10                     # 300秒內 有10個修改類的操做,就持久化

save 60  10000      #  60秒內 有10000個修改類的操做,就持久化

第二步,經過配置文件啓動 redis服務端,支持rdb持久化的 服務端

redis-server  rdbredis.conf 

(而且能夠經過 save指令 手動觸發持久化數據)

redis持久化之AOF

AOF(append-only log file)
記錄服務器執行的全部變動操做命令(例如set del等),並在服務器啓動時,經過從新執行這些命令來還原數據集
AOF 文件中的命令所有以redis協議的格式保存,新命令追加到文件末尾。
優勢:最大程序保證數據不丟
缺點:日誌記錄很是大安全

redis-client   寫入數據  >  redis-server   同步命令   >  AOF文件

配置參數:服務器

AOF持久化配置,兩條參數

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

流程:

1.準備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服務

redis-server /etc/redis.conf

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

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

4.登陸redis-cli,寫入數據,實時檢查aof文件信息

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

5.設置新key,檢查aof信息,而後關閉redis,檢查數據是否持久化

redis-cli -a redhat shutdown

redis-server /etc/redis.conf

redis-cli -a redhat

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

確保redis版本在2.2以上

[root@pyyuc /data 22:23:30]#redis-server -v
Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=64cb6afcf41664c

本文在redis4.0中,經過config set命令,達到不重啓redis服務,從RDB持久化切換爲AOF

實驗環境準備

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 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@pyyuc /data 22:34:16]#ls 6379/
dbmp.rdb  redis.log

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

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

執行命令,開啓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的配置將丟失

相關文章
相關標籤/搜索