【大廠面試】面試官都愛問的 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 ""
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章