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的配置將丟失