爲何不見了?
先來說說場景:
項目在上生產之前,我們已經把所需要的數據提前加入到redis當中,因爲在生產環境中,rbd和aof持久化是需要兩個同時打開的,而redis默認只打開了rbd。
爲啥要兩個都打開呀?
rdb 丟失數據較多,但是在恢復數據比較快,aof 丟失的數據較少,但是恢復慢。 所以,在生產環境,一般都會全部打開。
怎麼丟失的?
我們在轉移到生產服務器上之後,就要檢查和修改各項配置,而redis就是其中一個。由於redis.conf文件默認只開啓了rbd持久化,需要把aof持久化打開。
問題就是出在這裏,在測試環境上,所用的持久化方式都是rdb,然後直接通過redis.conf配置文件把aof打開,那麼,在redis啓動的時候,會去加載aof文件,從而不會加載rbd文件,最後結果就是rbd數據沒有被加載,導致數據丟失的假象。
來看演示:
現在我們有一臺redis,只開啓了rbd持久化,並且有少量的數據,這個時候一切都正常。
現在通過redis.conf文件來開啓aof持久化配置,並且重新啓動redis:
然後我們再來看下redis中的數據量有多少:
雖然數據量是0,但是並不代表數據就丟失了,數據還是之前rbd持久化文件當中,只是多了一個aof文件。
正確的處理方式
1、首先我們需要先把redis.conf文件中的aof關閉掉。
2、啓動redis,然後通過命令的方式,打開aof持久化配置。(因爲是通過rdb持久化方式啓動的redis,數據已經加載到內存當中,通過命令的方式打開aof,aof會去持久化當前內存中的數據)
3、最後再把redis.conf文件的中的aof打開,因爲通過命令去修改配置文件,只是本次有效,下一次就失效了。