Redis 是一款開源的、性能高效的鍵值對(duì)存儲(chǔ)系統(tǒng),廣泛應(yīng)用于緩存、消息隊(duì)列、排行榜、實(shí)時(shí)系統(tǒng)等多種場(chǎng)景。開啟 Redis 的 AOF(Append Only File)功能,可以將 Redis 的寫操作記錄到磁盤中,從而有效防止數(shù)據(jù)丟失。
什么是 AOF
Redis 支持兩種持久化方式:RDB 和 AOF。
- RDB:采用快照方式進(jìn)行數(shù)據(jù)持久化。在設(shè)定的時(shí)間間隔內(nèi),Redis 會(huì)將內(nèi)存中的數(shù)據(jù)快照保存至磁盤。但快照保存在 Redis 內(nèi)存中,若 Redis 進(jìn)程崩潰,數(shù)據(jù)將全部丟失。
- AOF:通過記錄每一個(gè)寫操作來實(shí)現(xiàn)數(shù)據(jù)持久化。Redis 重啟時(shí),可以通過重新執(zhí)行這些寫操作來恢復(fù)數(shù)據(jù)。相比 RDB,AOF 更加可靠。
AOF 文件是一種只追加的日志文件形式,新的寫操作會(huì)被追加到文件末尾,而不是覆蓋原有內(nèi)容。通過 AOF 重寫機(jī)制,可以移除文件中的冗余寫操作,減小 AOF 文件大小。
基本配置
在 Redis 配置文件 `redis.conf` 中,通過以下配置開啟 AOF:
appendonly yes appendfilename "appendonly.aof"
`appendonly` 設(shè)置為 `yes` 即可開啟 AOF 功能,`appendfilename` 定義 AOF 文件名稱。若未指定 `appendfilename`,默認(rèn)文件名為 `appendonly.aof`。
開啟配置后,Redis 會(huì)將所有寫命令記錄至磁盤。Redis 重啟時(shí),通過從 AOF 文件重放命令來恢復(fù)之前的狀態(tài)。
AOF 持久化模式
AOF 持久化模式有三種:`always`、`everysec` 和 `no`,各自特性如下:
- always:每個(gè)寫操作都同步到 AOF 文件并保存至磁盤。
- everysec:每秒同步寫操作到 AOF 文件并保存至磁盤。
- no:由操作系統(tǒng)在必要時(shí)同步 AOF 文件至磁盤。
`always` 模式提供最高數(shù)據(jù)安全性,但可能降低性能;`everysec` 模式平衡了性能與安全性;`no` 模式性能最佳,但安全性最低。
通過以下配置設(shè)置 AOF 持久化模式:
appendfsync always
AOF 重寫機(jī)制
隨著 AOF 文件不斷增長,AOF 重寫機(jī)制可以減少文件中的冗余寫操作,壓縮文件大小,提升性能。
AOF 重寫過程如下:
- 創(chuàng)建新的 AOF 文件,保存重寫后的數(shù)據(jù)。
- 保留最新、未過期的鍵及在過期時(shí)間內(nèi)被修改過的鍵。
- 重寫完成后,將新的 AOF 文件重命名并覆蓋原文件。
通過以下配置設(shè)置 AOF 重寫機(jī)制:
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
`auto-aof-rewrite-percentage` 設(shè)置 AOF 文件增長比例觸發(fā)重寫操作,`auto-aof-rewrite-min-size` 設(shè)置觸發(fā)重寫操作的 AOF 文件最小值。
總結(jié):通過使用 AOF 持久化機(jī)制,可以有效避免數(shù)據(jù)丟失。配置 AOF 時(shí),應(yīng)考慮持久化模式與 AOF 重寫機(jī)制,以達(dá)到最佳的性能與數(shù)據(jù)安全性平衡。