當前位置:成語大全網 - 新華字典 - 采訪中被問到Redis堅持的原理,本文在做詳細回答。

采訪中被問到Redis堅持的原理,本文在做詳細回答。

我們知道redis是壹個高效的分布式內存數據庫。因為是操作內存,所以性能很快。它通常被用作分布式緩存,以提高微服務的高性能。但因為是操作內存,所以當出現服務器故障和斷電時,內存數據會丟失且不可恢復。所以redis引入了持久化機制,將內存數據寫入磁盤,從而保證Redis的數據不會丟失。

雷迪斯有兩種堅持方式,壹種是RDB,另壹種是AOF。

RDB將數據的快照存儲在磁盤上的Redis內存中,這是Redis的默認持久化方案。

默認情況下,RDB持久性有三種策略。

可以在redis.conf中配置,按照壹段時間內達到指定修改次數的規則觸發快照操作。快照文件名為dump.rdb。每次Redis服務重新啟動時,數據將從該文件加載到內存中。

60秒內10000次操作觸發RDB持久性。

如果不滿足第壹個條件,1操作將在900秒內觸發RDB持久性。

如果不滿足第二個條件,10操作將在300秒內觸發RDB持久性。

不僅可以根據配置中的策略觸發RDB持久性,還可以使用save和bgsave命令手動觸發。這兩個命令的區別在於save將阻塞服務器進程。在執行save命令的過程中,服務器不能處理任何請求,但是bgsave(後臺保存)命令會通過壹個子進程在後臺處理數據RDB持久化。本質上save和bgsave調用的是rdbSave函數,所以Redis不允許save和bgsave命令同時執行,當然是為了避免RDB文件數據的不壹致。

每次都是大文件,備份寫IO操作筆記大,容易耗費時間,影響進程資源的使用。

如果最後壹個進程崩潰,最後壹次數據備份後的數據將會丟失。

文件可以直接作為冷備。

AOF(Append Only File)將每個寫命令記錄在壹個獨立的日誌中,可以解決數據持久化的實時性問題。當系統重新啟動時,您可以重新執行AOF文件中的命令來恢復數據。AOF首先將命令追加到AOF緩沖區,然後根據相應的策略將其寫入硬盤。

AOF的實施過程有三個步驟。

第壹步

將命令附加到AOF緩沖區,

第二步

將緩沖區的內容寫入程序緩沖區。

第三步

將程序緩沖區的內容寫入文件。

當AOF持久化功能開啟時,服務器每次執行命令時,都會將命令以協議格式追加到redisServer結構的aof_buf緩沖區中。當服務重新啟動時,AOF文件將被加載到緩沖區中。

AOF有三個觸發機制。

always:每次數據發生變化,都會立即記錄到磁盤上,性能差但數據完整性好。

everysec:每秒將aof_buf緩沖區的內容寫入aof文件。如果關閉,數據將在1秒內丟失。

否:把數據同步操作交給操作系統,性能最好,但數據可靠性最差。在配置文件中設置appendonly=yes後,如果未指定apendfsync,默認情況下將使用everysec選項。

隨著時間的推移,寫指令中記錄了許多重復的指令,產生了非常大的數據量。

RDB優先於AOF。

RDB很小,AOF很大。

RDB慢,AOF快。

RDB很快,AOF很慢。