面試官:Redis持久化能關(guān)嗎?怎么關(guān)?
數(shù)據(jù)持久化是指將數(shù)據(jù)從內(nèi)存中,保存到磁盤或其他持久存儲介質(zhì)的過程,這樣做的目的是為了保證數(shù)據(jù)不丟失。
而 Redis 的持久化功能默認是開啟的,這樣做的目的也是為了保證程序的穩(wěn)定性(防止緩存雪崩、緩存擊穿等問題)和數(shù)據(jù)不丟失。
Redis持久化能關(guān)嗎?怎么關(guān)?
Redis 持久化默認是開啟的,但可以手動關(guān)閉。
Redis 4 之后它的持久化總共有以下三種方式:
- RDB(Redis DataBase)持久化:快照方式持久化,將某一個時刻的內(nèi)存數(shù)據(jù),以二進制的方式寫入磁盤。
- AOF(Append Only File)持久化:文件追加持久化,記錄所有非查詢操作命令,并以文本的形式追加到文件中。
- 混合持久化:RDB + AOF 混合方式的持久化,Redis 4 之后新增的方式,混合持久化是結(jié)合了 RDB 和 AOF 的優(yōu)點,在寫入的時候,先把當前的數(shù)據(jù)以 RDB 的形式寫入文件的開頭,再將后續(xù)的操作命令以 AOF 的格式存入文件,這樣既能保證 Redis 重啟時的速度,又能減低數(shù)據(jù)丟失的風險。
所以,我們要關(guān)閉 Redis 持久化,需要將以上三種持久化方式全部關(guān)閉,具體操作如下。
1、關(guān)閉RDB持久化
在 Redis 的配置文件 redis.conf 中,你可以將以下配置項設(shè)置為禁用狀態(tài):
save "" # 將 save 參數(shù)列表清空,表示不進行任何條件下的數(shù)據(jù)保存
或者直接注釋掉所有 save 行以取消 RDB 持久化。
2、關(guān)閉AOP持久化
在 redis.conf 配置文件中,將以下配置項修改為禁用 AOF:
appendonly no # 設(shè)置為 no,表示關(guān)閉 AOF 持久化
3、關(guān)閉混合持久化
在 redis.conf 配置文件中,將以下配置項修改為禁用混合持久化:
rdb-aof-use-rdb-preamble no # no 表示關(guān)閉混合持久化
或者是將混合持久化這行配置給注釋掉,如下所示:
# rdb-aof-use-rdb-preamble yes
注意:以上持久化關(guān)閉之后,都需要重啟 Redis 服務才能生效。
小結(jié)
Redis 持久化功能默認是開啟的,這樣做的目的也是為了保證程序的穩(wěn)定性(防止緩存雪崩、緩存擊穿等問題)和保證數(shù)據(jù)不丟失。想要手動關(guān)閉 Redis 持久化,需要將 RDB、AOF 和混合持久化全部關(guān)閉才行,并且關(guān)閉之后需要重啟 Redis 服務才能生效。
課后思考
Redis 關(guān)閉持久化之后,數(shù)據(jù)一定會丟失嗎?為什么?