1. 程式人生 > >Redis AOF 全持久化

Redis AOF 全持久化

來源: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 的方式解決!