redis 持久化
redis 持久化有兩種方式:1. RDB 方式 , 2. AOF 方式
RDB 方式
RDB持久化方式,是redis默認的持久方式。它是根據一定的“規則”自動或者是手動的,以“快照的”形式,將內存中的數據存儲到硬盤中。
整個存儲的過程叫“快照”.
快照原理
- redis 使用fork函數複製一份當前進程的副本
- 主進程繼續處理客戶端的請求,子進程將數據寫入硬盤臨時文件
- 子進程寫入完成所有數據後湖使用臨時文件替換舊的RDB文件。
快照文件位置
快照默認存儲當前進程工作目錄下dump.rdb
獲取redis 的目錄命令: config get dir
修改位置參數:
dir: 目錄
dbfilename : 文件名稱
# The filename where to dump the DB
dbfilename dump.rdb
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir ./
RDB數據快照幾種方式:
1. 自動快照
redis 允許用戶自定義“自動快照規則”。
規則格式: save + seconds + changes
seconds: 時間(秒) changes: 內存中鍵被修改的次數
redis 提供如下默認配置:
save 900 1
save 300 10
save 60 10000
分別代表:
900秒裏有一次修改就自動持久化
300秒內有10被修改就自動持久化
1分鐘中有一萬次被修改就自動持久化
驗證方法
修改 redis.conf 的快照策略,通過 lastsave: 查看最近一次快照時間,比較保存前後的時間差異,來判斷
2. 命令持久化
redis 除了自動快照,也可以手動進行快照,save, bigsave, flushall
save 命令
當執行save命令時候,redis會“同步”的方式進行快照操作,在快照過程中會“阻塞”所有的客戶端請求。 數據量大時候,有可能造成客戶端請求超時.
bigsave 命令
bigsave 不同於save 操作,它是採用異步的方式進行快照, 當進行bigsave命令後,redis會立即返回成功,redis服務器可以繼續處理客戶端的請求。
如果要判斷快照是否成功,可以通過lastsave命令;
lastsave 可以獲取最近一次成功的快照時間。 將快照前後的兩次lastsave 時間做比對;
3. 主從複製
以後補充。
AOF 方式
默認情況下 redis 沒有開啓AOF(append only file) 方式持久化,因爲AOF是採用日誌的形式將每一條寫命令都追加到硬盤上,這一過程明顯會降低redis的性能。
開啓方式與存儲文件名稱
appendonly yes
appendfilename appendonly.aof