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