redis做爲典型的nosql數據庫,其擁有兩種持久化的方案,分別是RDB (Redis DataBase)和 AOF (Append Only File)接下來就簡單的介紹一下兩種方式的優缺點,以及相關的配置操做等。
rdb是redis默認的持久化的方案,是以快照的方式,將內存中的數據不斷寫入磁盤。詳細描述過程是:在指定的時間間隔內,執行指定次數的寫操做,則會將內存中的數據寫入到磁盤當中,同時在指定的相關目錄下生成dump.rbd文件,而後redis重啓的時候,會加載該文件,恢復數據redis
咱們打開redis.conf文件,能夠找到SNAPSHOTTING 快照這部分對應的內容sql
#save <seconds> <changes> # save "" save 900 1 save 300 10 save 60 10000
解讀:其中save <seconds> <changes>
這一行第一個參數是seconds 表示的時間間隔,第二個參數表示是執行指定次數更新操做,
redis的默認配置時間有三個:分別是900秒內1個更改,300秒內10個更改,60秒內10000個更改,則將內存中的數據快照寫入磁盤。數據庫
若是不想用RDB的方案,能夠將save ""
去掉註釋,官方默認的的加上註釋。安全
dbfilename dump.rdb
服務器
dir ./
微信
# Compress string objects using LZF when dump .rdb databases? # For default that's set to 'yes' as it's almost always a win. # If you want to save some CPU in the saving child set it to 'no' but # the dataset will likely be bigger if you have compressible values or keys. rdbcompression yes
解答:配置存儲.rdb數據庫的時候,是否壓縮數據。默認爲yes。redis的rbd會採用lzf的壓縮方式,可是會佔用cpu的,若是關閉的話,當前數據庫文件會邊的巨大。app
將dump.rdb 文件拷貝到redis的安裝目錄的bin目錄下,重啓redis服務便可。在實際開發中,通常會考慮到物理機硬盤損壞狀況,選擇備份dump.rdb 。能夠從下面的操做演示中能夠體會到。異步
因此Redis 的持久化和數據的恢復要選擇在夜深人靜的時候執行是比較合理的。nosql
AOF:redis默認不開啓,它是爲了彌補RDB的數據不一致性,採用了日誌的形式記錄每個寫操做,而且追加到文件中。當redis重啓會根據日誌的內容將寫的指令從前到後按照順序執行一次,從而完成數據的恢復工做。性能
打開 redis.conf 文件,找到 APPEND ONLY MODE 對應內容
appendonly yes
appendfilename "appendonly.aof"
# appendfsync always appendfsync everysec # appendfsync no
解說:
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
解說:當AOF文件大小是上次rewrite後大小的一倍且文件大於64M時觸發。通常都設置爲3G,64M過小了。
根據配置文件觸發,能夠是每次執行觸發,能夠是每秒觸發,能夠不一樣步。
正常狀況下,將appendonly.aof 文件拷貝到redis的安裝目錄的bin目錄下,重啓redis服務便可。但在實際開發中,可能由於某些緣由致使appendonly.aof 文件格式異常,從而致使數據還原失敗,能夠經過命令redis-check-aof --fix appendonly.aof 進行修復 。從下面的操做演示中體會。
前面也說到了,AOF的工做原理是將寫操做追加到文件中,文件的冗餘內容會愈來愈多。因此聰明的 Redis 新增了重寫機制。當AOF文件的大小超過所設定的閾值時,Redis就會對AOF文件的內容壓縮。
重寫的原理:Redis 會fork出一條新進程,讀取內存中的數據,並從新寫到一個臨時文件中。並無讀取舊文件。最後替換舊的aof文件。
觸發機制:當AOF文件大小是上次rewrite後大小的一倍且文件大於64M時觸發。這裏的「一倍」和「64M」 能夠經過配置文件修改。
優勢:數據的完整性和一致性更高
缺點:由於AOF記錄的內容多,文件會愈來愈大,數據恢復也會愈來愈慢。
更多精彩內容,歡迎你們關注個人微信公衆號:喝醉的清茶