redis中數據持久化(四)

redis中數據持久化介紹

目前會在兩種情況下使用

1. 作爲數據庫使用;

2. 作爲緩存服務器使用。

redis的高性能很大程度上是因爲其把數據存儲在內存中,然而當redis重啓時或者意外當機後,數據都會丟失。爲了不讓redis中數據丟失,我們需要把內存中的數據以某種方式存儲的硬盤中,使得redis服務器重啓後數據可以恢復,這一過程稱之爲持久化

redis支持兩種方式的數據持久化,一是RDB方式;二是AOF方式。

RDB方式會根據指定的規則,“定時”將內存中的數據寫入硬盤中;

AOF方式每次執行命令會將命令本身記錄下來。

兩種方式都可以單獨使用,通常是兩者配合使用。下面分別對兩種方式介紹。


以下配置都是通過修改redis根目錄下的redis.conf文件

一. RDB方式

RDB的方式是通過快照(snapshot)完成,當符合規則時redis會把內存的數據生成一個副本並存儲在硬盤中,這個過程稱之爲“快照”。

redis會在以下幾種情況執行快照

1. 根據配置規則自動快照

2. 用戶執行save或bgsave命令

3. 執行flushall命令

4. 執行復制時。

下面對以上4中方式分別介紹

1.1 根據配置規則自動快照

用戶可以自定義快照條件,用戶可以在配置文件中自定義,格式如下:

save 時間 改動鍵的個數

save是關鍵字;時間是指在多長時間內,單位是秒;改動鍵的個數是指在指定時間內,被更改的個數大於我們指定的改動鍵個數時,自動執行快照。


如:

save 100 1

save 60 10

save 30 1000

命令允許存在多個,它們之間的關係式或者關聯。以上的命令意思是,每隔100秒,保存一次;或者,60秒內,有10個以上鍵值發生變化;或者,30秒內,有1000個鍵值發生變化。當滿足以上3個條件任何之一,redis會自動快照。


1.2 用戶執行save或bgsave命令

當我們需要重啓redis服務、遷移redis服務、備份redis服務時,需要手動執行快照,這時可以使用save或者bgsave命令。

save:同步執行,這時會影響用戶請求,當redis數據比較大時,不建議使用此命令;

bgsave:後臺異步執行,不影響用戶對redis的請求。可以使用lastsave命令,查看最後快照時間。


1.3 執行flushall命令

執行flushall命令時,會清除redis中所有數據。當有任何一個自定義快照條件是,都會觸發快照操作;若沒有自定義任何快照規則,則不會觸發自定義快照。


1.4 執行復制時。

當redis服務配置了主從複製時,即使沒有配置任何自定義快照條件,沒有執行任何手動操作(執行save或者bgsave),也會執行快照。


redis默認會將快照文件存儲在當前目錄下的dump.rdb文件中,可以配置dir和dbfilename兩個參數分別之間文件路徑和文件名。

如:

dir c:\gyc

dbfilename dump.rdb


注:通過RDB方式持久化redis,一旦redis異常退出,那麼都會丟失最後一次快照後的所有更改的數據。如果不能接受丟失的這些數據,建議使用AOF方式持久化數據。

二. AOF(append only file)方式

當使用redis來存儲非臨時數據時,需要開啓AOF方式持久化。AOF將redis執行的每一條命令追加到磁盤中,這樣會降低redis的性能,不夠還是可以接受的。

2.1. 開啓AOF方式

默認情況redis沒有開啓AOF方式,可以通過appendonly命令來啓用,如:

appendonly yes

可以指定存儲文件路徑,如:

dir c:\redis_aof

appendfilename appendonly.aof


2.2. 同步到磁盤中

雖然每次操作,redis都會把命令寫到AOF文件中,但是由於操作系統緩存機制,這時並沒有把所有數據真正寫到磁盤中,而是進入到硬盤緩存。一般情況下,系統會每隔30秒做一次把硬盤緩存中數據寫入磁盤中。

可以通過以下命令,執行:

# appendfsync always

# appendfsync no

appendfsync everysec


第一條命令是,每次執行寫入,都會執行同步,最安全也最慢;

第二條命令是,不主動執行同步,而是由系統自動執行,也就是30秒執行,不建議,有可能會丟失30秒的數據;

第三條命令是,每秒執行一次,redis默認執行此種;



redis支持同時開啓RDB和AOF,系統重啓後,redis會使用AOF來恢復數據。這樣丟失的數據會最少。

發佈了27 篇原創文章 · 獲贊 41 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章