Redis是一款內(nèi)存型數(shù)據(jù)庫,數(shù)據(jù)存儲在內(nèi)存中,這樣讀寫數(shù)據(jù)速度非常快。但是,因為內(nèi)存是易失性的,一旦Redis進(jìn)程退出或機(jī)器斷電,所有數(shù)據(jù)就會丟失。為了解決這個問題,Redis提供了兩種持久化方式,將數(shù)據(jù)保存到磁盤上,保證數(shù)據(jù)的安全可靠。
RDB持久化方式
RDB持久化將Redis里面的數(shù)據(jù)保存在硬盤里面,形成一個快照。可以理解為Redis在某個時間點的數(shù)據(jù)副本。保存快照涉及到三個參數(shù)。
save seconds changes:在指定秒數(shù)內(nèi),如果有指定數(shù)量的數(shù)據(jù)發(fā)生變更,則執(zhí)行保存快照操作。
stop-writes-on-bgsave-error yes/no:表示保存快照時redis是否停止響應(yīng)所有命令。
rdbcompression yes/no:是否壓縮快照文件。如果開啟,會占用更多CPU資源。
RDB的優(yōu)點是快照完整,文件緊湊,適合在數(shù)據(jù)比較穩(wěn)定的情況下使用。缺點是RDB快照操作是阻塞Redis服務(wù)的,適合長時間備份的磁盤作為Redis保存快照的地方。
AOF持久化方式
AOF持久化可將Redis執(zhí)行的每個寫命令增量地追加到文件末尾,形成一種運(yùn)行日志。每個命令都以Redis協(xié)議的形式保存。AOF有以下三種方式進(jìn)行轉(zhuǎn)儲。
appendfsync always:每執(zhí)行一個寫命令,立即將命令內(nèi)容追加到AOF文件的末尾,硬盤刷盤操作。
appendfsync everysec:每秒將執(zhí)行的寫命令追加到AOF文件的末尾。
appendfsync no:不主動將寫命令追加到AOF文件,交給操作系統(tǒng)處理。
AOF的優(yōu)點是能夠保留所有執(zhí)行的寫命令,數(shù)據(jù)不會因為某些原因丟失。AOF文件可以很方便地進(jìn)行備份和遷移。缺點是文件相對于RDB來說更為龐大,寫入速度相對于RDB要慢一些。
結(jié)論
以上介紹了Redis持久化方式的特點,不同的方式各有優(yōu)缺點,應(yīng)根據(jù)實際需求進(jìn)行選擇。在使用RDB或者AOF時,也可以同時啟動兩種持久化方式進(jìn)行備份,增加數(shù)據(jù)的安全性。