前言
一般我們經常會用Redis做快取資料庫提高訪問速度,也方便在多個業務行程之間共享資料,但是,畢竟是在記憶體中的資料,一旦斷電或重啟就會丟失,所以持久化操作還是有必要的,Redis有RDB和AOF兩種方案進行持久化
RDB:將Reids在記憶體中的資料庫定時dump到磁盤上(默認檔案名dump.rdb)
AOF:將Reids的操作日志以追加的方式寫入檔案(默認是appendonly.aof)
以上兩種持久化方式可以在redis.conf檔案里進行配置
1.RDB持久化(默認)
RDB方式就是相當于給當前資料生成一個快照保存到硬碟中,所以它是備份全部資料的,有save、bgsave、自動化三種觸發機制
save
這種觸發會阻塞當前Redis服務器,即Redis不能再提供其他服務,直到備份完成為止,所以一般不用它
bgsave
看名字就知道,是在后臺進行save,這種觸發機制會執行fork()開啟一個子執行緒在后臺進行持久化,雖然fork階段也會阻塞行程,但是時間極短,所以我們常用bgsave進行持久化

自動觸發(bgsave)
自動觸發是按照組態檔里的配置項觸發的,打開Redis的conf組態檔,直接搜索“save”就能看到一些默認配置
...
# like in the following example:
#
# save ""
save 900 1 # 900秒后,如果至少有1個key發生變化就觸發持久化操作
save 300 10
save 60 10000
# By default Redis will stop accepting writes if RDB snapshots are enabled
...
上面的意思是,多少秒后至少有多少個key發生變化就觸發RDB持久化
2.AOF持久化
AOF(append only file) 以獨立日志的方式記錄每次寫命令,AOF默認是不開啟的,如果有需要,可以打開Redis的conf組態檔,找到appendonly項,把no改為yes
AOF是以追加的方式寫到日志檔案(默認是appendonly.aof),當然它不會每次都直接寫進硬碟,而是追加到AOF緩沖區,AOF緩沖區根據對應的策略向硬碟做同步操作
那這樣做AOF會越來越大,所以需要對AOF檔案進行重寫,比如說丟合并命令、丟棄無用命令等,重寫AOF檔案的操作,并沒有讀取舊的AOF檔案,而是將整個記憶體中的資料庫內容用命令的方式重寫了一個新的AOF檔案,這點和快照有點類似

AOF也有三種觸發機制
# If unsure, use "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no
# When the AOF fsync policy is set to always or everysec, and a background
everysec: 每一秒都同步,這個是默認的方式
always: 一旦有資料發生改變就寫到AOF
no: 從不同步,即不進行持久化
3.RDB和AOF的對比
RDB和AOF各有優缺點
| 方式 | 啟動優先級 | 體積 | 恢復速度 | 安全性 | 輕重 |
|---|---|---|---|---|---|
| RDB | 低 | 小 | 快 | 丟資料 | 重 |
| AOF | 高 | 大 | 慢 | 配置決定 | 輕 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/207256.html
標籤:其他
