Redis作爲一個內存數據庫,在數據安全以及集羣部署方面都提供了一系列工具可供使用。
一. Redis數據庫數據備份與恢復
Redis是內存型數據庫,但是爲了數據安全,就需要有“數據持久化“(就是將數據存儲在磁盤上)的機制,在備份方面提供了兩種工具,分別爲RDB和AOF。
1.RDB備份與恢復
RDB是利用快照來實現數據持久化的,當符合特定條件時,redis將會自動的將內存中的數據保存在硬盤上,當redis啓動時,會自動的將磁盤上的數據加載到內存中以實現數據環境的恢復。
(1)Redis條件進行RDB備份,步驟如下:
A.修改配置文件redis.conf:
save 900 1 # 900秒內有至少1個鍵被更改則進行快照
save 300 10 # 300秒內有至少10個鍵被更改則進行快照
save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照
dir path #path爲redis運行環境時操作的路徑
dbfilename rdbname #rdb數據備份文件名(如dump.rdb)
B.重啓Redis
注:這種方式的實現是Redis的主線程在條件觸發後,fork子進程後,在子進程中完成數據持久化的。
(2)Redis強制進行RDB備份,步驟如下:
在redis-cli中,使用如下命令:
redis-cli>SAVE #在主進程強制阻塞進行快照備份
或者
redis-cli>BGSAVE #主進程fork子進程進行快照備份
2.AOF備份與恢復
AOF(append only file)就是通過“將redis執行的每一條指令存儲在磁盤文件中“ 以實現數據持久化。
(1)開啓AOF功能
默認情況下,Redis是不開啓AOF的,要想使用該功能,則在redis.conf中配置:
appendonly yes
AOF文件存放的位置和RDB相同,可以這樣設置AOF文件:
dir path #文件存儲路徑
appendfilename appendonly.aof #aof文件拓展名爲aof
AOF的重寫配置:
auto-aof-rewrite-percentage 100 # 當目前的AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啓動時的AOF文件大小爲依據
auto-aof-rewrite-min-size 64mb # 允許重寫的最小AOF文件大小
注意:“重寫”並不是對原有aof文件進行重新寫入或其它操作,而是對原有指令進行簡化,如曾經對list進行三個push:
lpush li_key 1
lpush li_key 2
lpush li_key 3
然後重寫的結果就是:
lpush li_key 1 2 3
同理,對HASH table、SET、SORTED SET也是同樣的處理方式。
通過重寫,就實現了aof文件的壓縮;
當然,細心的朋友會發現一個問題,對AOF重寫時會影響redis的請求訪問的,那麼redis是怎麼解決的呢?
A. Redis通過fork子進程來完成重寫;
B. 重寫時在內存中先創建AOF緩存,在重寫的同時,將新指令同時寫入舊的AOF文件中和AOF緩存中;
C. 重寫完成後,將AOF緩存的內容寫入磁盤,替換舊的AOF文件
(2)主動強制進行AOF備份
redis-cli> BGREWRITEAOF
二.數據遷移和主從複製
1.直接備份文件數據遷移
Redis的數據遷移比較簡單,步驟如下:
(1)關閉目標Redis服務;
(2)將相應的RDB文件或者AOF文件複製過去;
(3)設置REDIS的DIR或者開啓AOF功能;
(4)啓動目標REDIS服務;
2.主從複製
主服務器配置redis.conf:
bind 127.0.0.1 192.168.1.158 #後面的IP地址爲從服務器能訪問的主機的ip
從服務器配置redis.conf:
slaveof <masterip> <masterport> #masterip爲192.168.1.158 masterport默認是6379
啓動主服務器和從服務器
另外:利用主從複製還能夠實現數據遷移,將目標redis服務設置成從服務,然後進行數據同步,完成後,就取消主從關係,就完成了數據遷移了。