本次演示使用的redis版本是3.2.100,操做系統是win10。redis
redis支持兩種持久化方案,RDB和AOF,前者是默認打開的,後者須要手動開啓。咱們經過配置文件能夠驗證這一點,數據庫
RDB默認開啓app
save 900 1 save 300 10 save 60 10000
這三條配置是RDS觸發快照的條件,它們的意思分別是:異步
固然,觸發rdb快照的條件不止這些,下面會講到。操作系統
AOF默認關閉日誌
appendonly no
RDB的方案是當知足觸發條件是,將內存中的數據以二進制的方式寫入磁盤保存,默認保存的文件叫dump.rdb(能夠改),當redis重啓時,會讀取該文件進行數據恢復。code
127.0.0.1:6379> config get dbfilename 1) "dbfilename" 2) "dump.rdb" 127.0.0.1:6379> config get dir 1) "dir" 2) "C:\\redis-6379" 127.0.0.1:6379>
除了上面提到的在指定時間內,指定寫次數觸發以外,下面幾種狀況也會觸發redis執行RDB快照,server
下面拿第一種狀況演示下,這裏會用到info Persistence命令,用來查看持久化信息。blog
127.0.0.1:6379> info persistence # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1561595205 ...省略其它 127.0.0.1:6379> save OK 127.0.0.1:6379> info persistence # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1561595940 ...省略其它 127.0.0.1:6379>
注意看rdb_last_save_time字段,說明save命令觸發了持久化。內存
爲了演示AOF,咱們須要手動把AOF開關打開,而後重啓redis。
AOF將Redis執行的每一條寫命令追加到磁盤文件(appendonly.aof)中,若是打開了AOF,redis啓動時候優先選擇從AOF文件恢復數據。
除了開關,和AOF相關的配置還有如下幾個:
appendfilename "appendonly.aof" #數據庫文件名 # appendfsync always #每一個命令都追加寫入 appendfsync everysec #每秒寫1次 # appendfsync no #寫入工做交給操做系統,由操做系統判斷緩衝區大小,統一寫入到aof no-appendfsync-on-rewrite yes: #正在導出rdb快照的過程當中,是否中止同步aof auto-aof-rewrite-percentage 100 #aof文件大小比起上次重寫時的大小,增加率100%時,重寫 auto-aof-rewrite-min-size 64mb #aof文件,至少超過64M時,才重寫
經過前面講述的AOF的過程,聰明的你可能會想到一個問題,AOF不斷的追加命令到文件,那文件豈不是愈來愈大,時間長了對磁盤空間也是負擔啊。
你都想到了,redis的做者會想不到嗎?redis引入了重寫機制來解決這個問題。上面配置的最後兩條其實就是重寫的觸發條件,說白了意思就是:
當AOF文件大小是上次rewrite後大小的一倍且文件大於64M時觸發
除了上面的條件觸發,AOF也支持手動觸發(bgrewriteaof命令)下面用這個命令演示重寫
λ redis-cli.exe 127.0.0.1:6379> bgrewriteaof Background append only file rewriting started 127.0.0.1:6379>
啓動日誌:
[18268] 27 Jun 09:23:41.282 # Server started, Redis version 3.2.100 [18268] 27 Jun 09:23:41.282 * The server is now ready to accept connections on port 6379 [18268] 27 Jun 09:24:03.236 * Background append only file rewriting started by pid 18740 [18268] 27 Jun 09:24:03.388 * AOF rewrite child asks to stop sending diffs. [18268] 27 Jun 09:24:03.488 # fork operation complete [18268] 27 Jun 09:24:03.489 * Background AOF rewrite terminated with success [18268] 27 Jun 09:24:03.491 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB) [18268] 27 Jun 09:24:03.496 * Background AOF rewrite finished successfully