
Redis 提供了多種不同級別的持久化方式:
- RDB 持久化可以在指定的時間間隔內生成資料集的時間點快照(point-in-time snapshot),
- AOF (Append-only file)持久化記錄服務器執行的所有寫操作命令,并在服務器啟動時,通過重新執行這些命令來還原資料集, AOF 檔案中的命令全部以 Redis 協議的格式來保存,新命令會被追加到檔案的末尾, Redis 還可以在后臺對 AOF 檔案進行重寫(rewrite),使得 AOF 檔案的體積不會超出保存資料集狀態所需的實際大小,
- Redis 還可以同時使用 AOF 持久化和 RDB 持久化, 在這種情況下, 當 Redis 重啟時, 它會優先使用 AOF 檔案來還原資料集, 因為 AOF 檔案保存的資料集通常比 RDB 檔案所保存的資料集更完整,
- 你甚至可以關閉持久化功能,讓資料只在服務器運行時存在,
一、RDB的持久化
作業原理:每隔一定時間給記憶體照一個快照,將記憶體中的資料寫入檔案(rdb檔案),這是Redis默認的持久化方式,當redis生成dump.rdb檔案時,作業程序如下:
- 當達到RDB生成條件時,redis主行程fork一個子行程
- fork出來的子行程將記憶體的資料集dump到臨時的RDB中
- 當子行程對臨時的RDB檔案寫入完畢,redis用新的RDB檔案代替舊的RDB檔案
配置引數如下:

RDB示例測驗:可以使用redis-benchmark進行壓力測驗,觀察RDB檔案大小的變化,
bin/redis-benchmark -n 100000 表示執行100000個操作
二、RDB的缺點:
在兩次快照之間,如果發生斷電,資料會丟失,舉例:在生成rdb后,插入新值,突然斷電,資料可能會丟失,
三、監控RDB:
Redis監控最直接的方法當然就是使用系統提供的 info 命令來做了,只需要執行下面一條命令,就能獲得 Redis 系統的狀態報告,
bin/redis-cli info | grep rdb_
- rdb_changes_since_last_save 表明上次RDB保存以后改變的key次數
- rdb_bgsave_in_progress 表示當前是否在進行bgsave操作,1表示正在進行;0表示沒有進行
- rdb_last_save_time 上次保存RDB檔案的時間戳
- rdb_last_bgsave_time_sec 上次保存的耗時
- rdb_last_bgsave_status 上次保存的狀態
- rdb_current_bgsave_time_sec 目前保存RDB檔案已花費的時間

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1123.html
標籤:NoSQL
