標籤:
簡介:
Redis AOF 持久化,將每次接收到更改 redis 資料的操作都記錄到一個 aof 檔案,當伺服器意外宕機或 redis 伺服器非法關閉時,不會遺失資料。
可以做到資料安全化,但是效能會受到影響。
1、修改 redis.conf
shell > vim /usr/local/redis/redis.confdaemonize yesport 6379timeout 300loglevel debugpidfile /usr/local/redis/logs/redis.pidlogfile /usr/local/redis/logs/redis.logdatabases 16#save 900 1#save 300 10#save 60 10000#rdbcompression yes#dbfilename dump.rdb## 關閉 RDB 持久化dir /usr/local/redis/data/appendonly yesappendfilename appendonly.aofappendfsync everysec## 開啟 AOF 持久化,定義 aof 檔案名稱,定義同步磁碟規則為每秒強制同步no-appendfsync-on-rewrite yesauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb## 由於 AOF 的特性是記錄每次操作,當用戶端執行相同的操作時,aof 也會記錄這些相同的每次操作,那麼 aof 檔案會不斷增加。
## 對於這個問題,可以使用 aof 檔案的重寫功能解決 aof 檔案的增長。當 aof 檔案滿足一定條件時就對 aof 進行重寫,重寫是根據當前記憶體資料庫中的資料進行遍曆到一個臨時的 aof 檔案,寫完後替換原來的 aof 檔案。## no-appendfsync-on-rewrite 參數表示在重寫期間對新接收到的寫操作不同步,暫時存在記憶體中,等重寫完後再寫入,防止與磁碟 IO 衝突。## auto-aof-rewrite-percentage 參數表示 aof 檔案增長率大於這個值並且同時 aof 檔案大於下面參數值時,觸發 aof rewrite## auto-aof-rewrite-min-size 參數表示當前 aof 檔案大小大於這個值時
2、測試 Redis AOF 持久化
shell > redis-server /usr/local/redis/redis.confshell > ls /usr/local/redis/data/appendonly.aof
## 產生一個 .aof 的空檔案
shell > redis-cliredis 127.0.0.1:6379> set name wangOKredis 127.0.0.1:6379> get name"wang"redis 127.0.0.1:6379> set name1 zhaoOKredis 127.0.0.1:6379> get name1"zhao"redis 127.0.0.1:6379> set name2 lunOKredis 127.0.0.1:6379> get name2"lun"redis 127.0.0.1:6379> quitshell > cat /usr/local/redis/data/appendonly.aof*2$6SELECT$10*3$3set$4name$4wang*3$3set$5name1$4zhao*3$3set$5name2$3lun
## 記錄了每一次操作
shell > kill -9 `cat /usr/local/redis/logs/redis.pid`
## 像測試 RDB 一樣,非法關閉 redis
shell > redis-server /usr/local/redis/redis.confshell > redis-cliredis 127.0.0.1:6379> get name"wang"redis 127.0.0.1:6379> get name1"zhao"redis 127.0.0.1:6379> get name2"lun"redis 127.0.0.1:6379> quit
## 啟動測試 keys/value 都存在。
## 建議使用 AOF 持久化的同時也使用 RDB 半持久化,AOF 的優先順序是高於 RDB 的,也就是說啟動服務時是先載入 AOF ,後載入 RDB 的。
## 當 Redis 伺服器磁碟壞掉時,資料如何保證不丟失? Master / slave 的方式解決!
Redis AOF 全持久化