Redis AOF 全持久化
阿新 • • 發佈:2018-12-31
來源:https://www.cnblogs.com/wangxiaoqiangs/p/5640018.html
簡介:
Redis AOF 持久化,將每次接收到更改 redis 資料的操作都記錄到一個 aof 檔案,當伺服器意外宕機或 redis 伺服器非法關閉時,不會丟失資料。
可以做到資料安全化,但是效能會受到影響。
1、修改 redis.conf
shell > vim /usr/local/redis/redis.conf daemonize yes port 6379 timeout 300 loglevel debug pidfile /usr/local/redis/logs/redis.pid logfile /usr/local/redis/logs/redis.log databases 16 #save 900 1 #save 300 10 #save 60 10000 #rdbcompression yes #dbfilename dump.rdb ## 關閉 RDB 持久化 dir /usr/local/redis/data/ appendonly yes appendfilename appendonly.aof appendfsync everysec ## 開啟 AOF 持久化,定義 aof 檔名,定義同步磁碟規則為每秒強制同步 no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-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.conf shell > ls /usr/local/redis/data/ appendonly.aof
## 生成一個 .aof 的空檔案
shell > redis-cli redis 127.0.0.1:6379> set name wang OK redis 127.0.0.1:6379> get name "wang" redis 127.0.0.1:6379> set name1 zhao OK redis 127.0.0.1:6379> get name1 "zhao" redis 127.0.0.1:6379> set name2 lun OK redis 127.0.0.1:6379> get name2 "lun" redis 127.0.0.1:6379> quit shell > cat /usr/local/redis/data/appendonly.aof *2 $6 SELECT $1 0 *3 $3 set $4 name $4 wang *3 $3 set $5 name1 $4 zhao *3 $3 set $5 name2 $3 lun
## 記錄了每一次操作
shell > kill -9 `cat /usr/local/redis/logs/redis.pid`
## 像測試 RDB 一樣,非法關閉 redis
shell > redis-server /usr/local/redis/redis.conf shell > redis-cli redis 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 的方式解決!