【redis】-持久化方式

爲什麼需要持久化?

redis之所以功能強大,是由於它將數據存儲在內存中,讀寫數據速度很快。但是內存中的數據一關機就沒了,爲了使Redis在重啓的時候仍能保證數據不丟失,才需要將數據從內存中以某種形式持久化到硬盤中。

怎麼持久化?

Redis支持兩種方式的持久化,一種RDB,一種AOF。可以單獨使用一種,也可以兩種結合使用。下面來分別說一下這兩種方式具體是怎麼工作的。

RDB

關鍵字:快照

快照是什麼?簡單的說就是某一時刻,對數據的複製品。
所以,RDB的工作原理就是,當符合一定條件時,Redis自動將內存中的所有數據進行快照並且存儲到硬盤上。

一定條件:可以看redis.conf中的這幾行
在這裏插入圖片描述
也就是兩個參數,時間和改動的鍵的個數。
配置文件中默認的是:15分鐘(900秒) 1次 或 5分鐘 10次 或 1分鐘10000次 ,當滿足這三個條件中一條的時候,會觸發save,將內存中的數據快照到硬盤。

快照數據:默認是快照到dump.rdb,也可以在配置文件中改,建議默認。Redis啓動會讀取RDB的快照文件,將數據從硬盤載入內存。

快照過程:
1、Redis使用fork函數複製一份當前進程(父進程)的副本(子進程)
2、父進程繼續接收並處理客戶端發來的命令,而子進程開始將內存中的數據寫入到硬盤中的臨時文件
3、當子進程寫入完成所有數據後會用該臨時文件替換舊的RDB文件

AOF

關鍵字:記錄操作
AOF持久化策略是將發送給Redis服務端的每一條命令都記錄下來,並且保存到硬盤中的AOF文件,默認是appendonly.aof,和dump.rdb一樣,也是可以在配置文件中進行修改的,不過建議默認。

問題:因爲是記錄操作,所以文件會越來越大,怎麼辦?

重寫策略:當達到一定條件的時候,可以使用BGREWRITEAOF命令來重寫AOF文件

一定條件:(配置文件默認如下,可修改)
auto-aof-rewrite-percentage 100
當前的AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啓動時的AOF文件大小爲依據

auto-aof-rewrite-min-size 64MB
允許重寫的最小AOF文件大小,通常在AOF文件很小的時候,即使其中有些冗餘的命令也是可以忽略的。
在這裏插入圖片描述

何時寫入AOF?
文件寫入,默認先寫系統緩存,系統30秒同步一次,才真正寫磁盤,在這30秒服務器宕機,數據還是會丟失,Redis可以通過配置來修改同步策略
appendfsync always 每次都同步(安全但慢)
appendfsync everysec 每秒同步,默認的同步策略
appendfsync no 不主動同步,由操作系統決定(最快但不安全)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章