Redis持久化之 RDB
RDB 持久化的操作條件
- 指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
save <seconds><changes>
Redis 默認配置文件中提供了三個條件
save 900 1
【表示 900秒(15分鐘)內有1個更改】
save 300 10
【表示 300秒(5分鐘)內有10個更改】
save 60 10000
【表示 60秒(1分鐘)內有10000個更改】 - 如果同時滿足以上三個默認的條件 redis 就是自動緩存數據到 dump.rdb 這個文件中,當然我們也可以對這三個條件進行適當的修改,如下圖所示:
1. RDB 是什麼?
- 在指定的時間間隔內將內存中的數據集快照寫入磁盤,也就是行話講的 Snapshot 快照,它恢復時是將快照文件直接讀到內存裏
- Redis 會單獨創建 fork 一個子進程來進行持久化,會先將數據寫入到一個臨時文件中,待持久化進程都結束了,再用這個臨時文件替換上次持久化好的文件。整個過程中,主進程是不進行任何的IO操作的,這就確保了極高的性能,如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效,RDB的缺點是最後一次持久化後的數據可能丟失。
2. Fork 是什麼?
- Fork 的作用是複製一個與當前進程一樣的進程。新進程的所有數據(變量、環境變量、程序計數器等)數值都和原進程一致,但是它是一個全新的進程,並作爲原進程的子進程
3. Rdb 保存的是 dump.rdb 文件
- 首先我們編輯 redis.conf 這個文件,一般我們都是在 linux 上面來玩 redis,而 redis 安裝位置我們默認都是安裝在 /opt/這個目錄下,然後我們找到 redis 的安裝目錄,進入目錄中編輯 redis.conf 這個文件,如果大家對這個 redis.conf 配置文件不怎麼了解,可以看下我之前發過的博客【大廠面試】Redis 中的 redis.conf 配置文件詳解,然後我們可以找到 dump.rdb 這個文件的位置
- 然後我們找到要看的內容
4. 配置位置
- 配置位置默認就是你在哪裏啓動 redis 服務,就會在哪裏生成 dump.rdb 這個文件,比如說我,我一般啓動 redis 都是在 redis 的安裝目錄中啓動 redis ,而對應的 dump.rdb 持久化文件也就默認在這個目錄中創建,如下圖所示:
- 然後我們也可以修改它自動生成的位置,如下圖所示:
5. 如何觸發 RDB 快照
- 配置文件中默認的快照配置
冷拷貝後重新使用,可以拷貝 cp dump.rdb dump_new.rdb - 命令 save 或者是 bgsave 都可以對 redis 進行保存持久化操作
Save:save 時只管保存、其他不管、全部堵塞
bgsave:Redis 會在後臺異步進行快照操作,快照同時還可以響應客戶端
請求,可以通過 lastsave 命令獲取最後一次成功執行快照的時間
- 執行 flushall 命令,也會產生 dump.rdb 文件,但裏面是空的,無意義
6. 如何恢復
- 將備份文件(dump.rdb)移動到redis安裝目錄並啓動服務即可
- CONFIG GET dir 獲取目錄
7. 優勢
- 適合大數據的數據規模
- 對數據完整性和一致性要求不高
8. 劣勢
- 在一定時間間隔做一次備份,所以如果 redis 意外 down 掉的話,就會丟失最後一次快照後的所有修改
- Fork 的時候,內存中的數據被克隆了一份,大約2倍的膨脹性需要考慮
9. 如何停止
- 動態所有停止 RDB 保存規則的方法:
- 此命令意思就是在進入 redis 命令行時就停止 redis 持久化的操作
redis-cli config set save ""