一、RDB持久化
RDB(Redis DataBase)是Redis默認的持久化方式,它會將Redis的數據快照在特定時間間隔內寫入磁盤。默認情況下,Redis會每隔1小時講數據寫入到磁盤,如果至少有1個鍵發生了變化,則會在指定的時間間隔內將數據寫入磁盤。可通過設置配置文件中save選項來修改RDB持久化的時間間隔。
通常我們使用RDB進行備份和恢復,因為RDB文件是一個非常緊湊的二進制文件,其中包含了Redis在某個時間點上的所有數據。適用於大數據量,性能需求不高的場景。另外,如果Redis遇到意外重啟的情況時,可以通過讀取RDB文件重新加載數據。
save 900 1
save 300 10
save 60 10000
上述是Redis默認的三個保存策略,表示的是:900秒(15分鐘)內至少有1個key被更改,則進行一次持久化;300秒(5分鐘)內至少有10個key被更改,則進行一次持久化;60秒內有10000個key被更改,則進行一次持久化。
二、AOF持久化
AOF(Append Only File)是一種更為可靠的持久化方式,它可以記錄Redis執行的寫操作指令,配合恢復Redis數據時能夠更好地保證數據的一致性和完整性。當Redis重啟時,可以通過重放AOF文件中的指令,將數據回復到重啟前的狀態。對於品質和可靠性需求更高的系統,建議使用AOF持久化。開啟AOF持久化需要在配置文件中設置appendonly參數為yes。
AOF文件中的指令為追加寫入到文件中,如果AOF文件中的內容變得太大,可以通過調用bgrewriteaof指令對AOF文件進行重寫壓縮,去掉其中的過期和重複數據,也可以通過修改配置文件中的aof-rewrite-percentage和aof-rewrite-min-size參數,控制重寫AOF文件的時機。
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
上述是Redis默認的三個AOF持久化相關配置,appendonly設置為yes表示開啟AOF,appendfilename表示設置AOF存放路徑和文件名,appendfsync表示同步寫入方式,有三種模式:always總是同步寫磁盤,everysec每秒同步一次,no默認情況,操作系統將異步寫入磁盤。
三、混合持久化
混合持久化是Redis 4.0版本新增的特性。它結合了RDB和AOF的優點:在AOF持久化的前提下,使用RDB文件進行快速的內存恢復。具體實現是,系統首先將寫入的操作指令寫入AOF文件中,然後異步快照內存數據到RDB文件中。當Redis需要進行數據恢復時,首先將RDB數據快速地讀取到內存中,然後再通過重放AOF文件,將數據恢復到內存中。
在Redis混合持久化的配置中,需要同時配置RDB和AOF存儲路徑和演示策略。下面是Redis混合持久化配置的示例:
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
aof-use-rdb-preamble yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
四、持久化優化技巧
1、RDB快照操作時,Redis本身是單線程程序,進行快照時會暫停服務,導致客戶端請求被阻塞。為了減少持久化操作的阻塞時間,可以使用redis-benchmark客戶端工具的-r參數,在快照期間模擬增加數據訪問量。
redis-benchmark -r 100000 -n 100000
上述作用是在每1萬次請請求中插入100000次測試命令。這樣可以在Redis持久化的同時不影響運行效率。
2、可通過設置maxmemory-policy選項來控制Redis在超出設定內存使用量時的處理策略。可選的各種策略是:volatile-lru(僅淘汰帶有過期時間的key,使用LRU算法淘汰),volatile-ttl(僅淘汰帶有過期時間的key,優先使用過期時間),volatile-random(僅淘汰帶有過期時間的key,隨機決策淘汰)等。
maxmemory-policy volatile-lru
結合策略的設置,可以更好地控制Redis使用內存的限制,從而提高Redis的持久化效率和穩定性。
五、小結
Redis持久化是保證數據安全和可靠性的基礎,可以通過不同策略控制Redis數據的寫入和讀取,保證數據在恢復和讀取時的穩定性和可靠性。
原創文章,作者:RPIBO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/362658.html