天天看點

Redis學習(五) -- Redis持久化一、RDB二、AOF

Redis學習 -- Redis持久化

  • 一、RDB
    • 1、什麼是RDB
    • 2、怎麼使用RDB
    • 3、RDB的觸發機制
    • 4、RDB如何恢複資料
    • 5、優缺點
  • 二、AOF
    • 1、什麼是AOF
    • 2、AOF的配置
    • 3、AOF的使用

一、RDB

1、什麼是RDB

RDB會在指定的時間間隔内将記憶體中的資料集 快照寫入磁盤,恢複時是将快照檔案直接讀到記憶體中。

RDB儲存的是 dump.rdb

2、怎麼使用RDB

Redis中是預設開啟RDB的,我們可以在配置檔案中看到RDB是如何生效的:

Redis學習(五) -- Redis持久化一、RDB二、AOF
Redis學習(五) -- Redis持久化一、RDB二、AOF

這裡我們可以看到,配置檔案中預設的,就是在900秒内如果有一個key的改動,就會寫入到rdb快照中,我們就來測一下:

Redis學習(五) -- Redis持久化一、RDB二、AOF
Redis學習(五) -- Redis持久化一、RDB二、AOF

我們發現,果然有了一個dump.rdb的檔案,說明已經持久化成功了。後期呢,我們可以根據自己的需要來自定義,比如說在 60s内有1000個key的改動,才會寫入RDB中等待。

然後呢,我們現在來模拟下,現在k1這個key已經持久化了,那麼我們這時将redis服務關停,然後再次啟動,模拟服務突然當機,看能否恢複資料?

Redis學習(五) -- Redis持久化一、RDB二、AOF

現在我們已經關掉了redis,然後接着我們啟動redis:

Redis學習(五) -- Redis持久化一、RDB二、AOF

現在啟動成功,那我們看下,redis中是否有k1這個資料呢?

Redis學習(五) -- Redis持久化一、RDB二、AOF

我們發現,資料依然存在,說明持久化亦然生效!

3、RDB的觸發機制

觸發機制:

  1. 配置檔案中配置的save規則滿足的條件下,會自動觸發RDB
    Redis學習(五) -- Redis持久化一、RDB二、AOF
  2. 執行flushall指令來清空所有redis資料庫的資料時,也會觸發RDB:
    Redis學習(五) -- Redis持久化一、RDB二、AOF
    這裡我們使用flushall清空了redis,然後我們看是否生成了dump.rdb檔案:
    Redis學習(五) -- Redis持久化一、RDB二、AOF
    生成了!
  3. 關閉redis服務的時候,也會産生RDB檔案
    Redis學習(五) -- Redis持久化一、RDB二、AOF
    我們使用shutdown關閉了redis服務,然後看是否生成了dump.rdb:
    Redis學習(五) -- Redis持久化一、RDB二、AOF
    依舊生成了。

4、RDB如何恢複資料

很簡單,隻需要将rdb檔案放入我們redis的啟動目錄下就行,redis啟動的時候回自動檢查dump.rdb檔案,并恢複其中的資料。

那我們如何友善的檢視dump.rdb放置的位置呢?

127.0.0.1:6379> config get dir # 這個指令就可以檢視rdb檔案要放置的位置,下面傳回的/usr/local/bin目錄就是rdb檔案要放置的目錄
1) "dir"
2) "/usr/local/bin"

           

5、優缺點

優點:

  • 适合大規模的資料恢複;
  • 對資料的完整性要求不高。

缺點:

  • 需要一定的時間間隔進行操作,如果redis意外當機了,這個最後一次修改的資料就會沒有;
  • fork程序的時候,會占用一定的記憶體空間。

二、AOF

1、什麼是AOF

AOF就是将我們的所有操作都記錄下來,要恢複的時候使用這個檔案重新執行一遍。

以日志的形式來記錄每個寫操作,将Redis執行過的所有指令記錄下來(隻記錄寫操作)。

2、AOF的配置

Redis學習(五) -- Redis持久化一、RDB二、AOF

我們一般用AOF的話,隻将appendonly改為yes,即開啟AOF即可。

3、AOF的使用

現在我們将上面說的那個配置改為yes,開啟AOF,并重新開機redis服務。

Redis學習(五) -- Redis持久化一、RDB二、AOF

然後我們現在就在redis中寫入一些資料:

Redis學習(五) -- Redis持久化一、RDB二、AOF

然後再打開那個aof檔案看下:

Redis學習(五) -- Redis持久化一、RDB二、AOF

我們發現,aof已經記錄了我們的寫操作的指令了!

那如果這個aof檔案有損壞怎麼辦呢?

這時我們可以使用redis自帶的工具來修複aof檔案:

redis-check-aof --fix [要修改的檔案]