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