一、實現(xiàn)方式:
實現(xiàn)方式有2種:分別是 RDB文件 和 AOF文件
-
RDB文件(存儲數據)
指定就是數據庫目錄下的 dump.rdb 文件
redis運行服務后,會根據配置文件的設置的存盤頻率 把內存里的數據復制到數據庫目錄下的dump.rdb文件里(覆蓋保存) -
AOF文件(存儲命令)
redis服務AOF文件(與mysql服務的binlog日志文件的功能相同)
是一個文件,記錄連接redis服務后執(zhí)行的寫操作命令并且是以追加的方式記錄寫操作命令
默認沒有開啟,使用需要人為啟用。
二、RDB文件的使用
- 查看 redis服務存儲數據到硬盤的存盤頻率
vim /etc/redis/6379.conf (默認 219行 220行 221行)
# 以下的值可以根據需求進行修改
# save 秒 變量的個數
save 900 1 # 每15分鐘有1個變量改變則存盤
save 300 10 # 每5分鐘有10個變量改變則存盤
save 60 10000 # 每1分鐘有10000個變量改變則存盤
- 使用RDB文件還可以實現(xiàn)數據的備份和恢復
# 拷貝 dump.rdb 文件就是對數據的備份
[root@host56 ~]# cp /var/lib/redis/6379/dump.rdb /opt/
[root@host56 ~]# ls /opt/*.rdb
/opt/dump.rdb
# 模擬數據丟失
192.168.88.56:6379> FLUSHALL
OK
192.168.88.56:6379> keys *
(empty list or set)
# 把備份的dump.rdb文件再次拷貝回數據庫目錄就是恢復
# 停止內存沒有數據的redis服務
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379 shutdown
# 把沒有數據的dump.rdb文件刪除
[root@host56 ~]# rm -rf /var/lib/redis/6379/dump.rdb
# 把備份dump.rdb文件拷貝到數據庫目錄下
[root@host56 ~]# cp /opt/dump.rdb /var/lib/redis/6379/
# 啟動redis服務 并連接服務查看數據
[root@host56 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379
192.168.88.56:6379> keys *
1) "i"
2) "d"
3) "x"
- RDB方式的優(yōu)缺點:
| 優(yōu)缺點 | 說明 |
|---|---|
| 優(yōu)點 | 高性能的持久化實現(xiàn) —— 創(chuàng)建一個子進程來執(zhí)行持久化 先將數據寫入臨時文件,持久化過程結束后, 再用這個臨時文件替換上次持久化好的文件 |
| 過程中主進程不做任何IO操作 比較適合大規(guī)模數據恢復 且對數據完整性要求不是非常高的場合 |
|
| 缺點 | 意外宕機時,丟失最后一次持久化的所有數據 |
三、AOF文件的使用:
- 實現(xiàn)數據的備份和恢復
# 備份aof文件
[root@host56 ~]# cp /var/lib/redis/6379/appendonly.aof /opt/
[root@host56 ~]# ls /opt/*.aof
/opt/appendonly.aof
# 模擬數據丟失
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379
192.168.88.56:6379> flushall
192.168.88.56:6379> exit
# 恢復數據
# 把沒有數據的服務停止
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379 shutdown
# 刪除沒有數據的aof文件和rdb文件
[root@host56 ~]# rm -rf /var/lib/redis/6379/*
# 把備份的aof文件拷貝到數據庫目錄
[root@host56 ~]# cp /opt/appendonly.aof /var/lib/redis/6379/
# 啟動redis服務并查看數據
[root@host56 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379
192.168.88.56:6379> keys *
1) "v4"
2) "v3"
- 修復有問題的aof文件
[root@host56 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof
0x 78: Expected prefix '*', got: 'd'
AOF analyzed: size=126, ok_up_to=120, diff=6
This will shrink the AOF from 126 bytes, with 6 bytes, to 120 bytes
Continue? [y/N]: y 同意修復
Successfully truncated AOF
- 與aof 相關的配置項 ( vim /etc/redis/6379.conf )
| 參數 | 說明 |
|---|---|
| appendfsync always** | 時時記錄,并完成磁盤同步 安全性較高,內存消耗過大 |
| appendfsync everysec | 每秒記錄一次,并完成磁盤同步 推薦策略 |
| appendfsync no | 寫入aof ,不執(zhí)行磁盤同步 |
- AOF文件的優(yōu)缺點:
| 優(yōu)缺點 | 說明 |
|---|---|
| 優(yōu)點 | 可以靈活設置持久化方式 |
| 出現(xiàn)意外宕機時,僅可能丟失1秒的數據 | |
| 缺點 | 持久化文件的體積通常會大于RDB方式 |
| 執(zhí)行fsync策略時的速度可比RDB方式慢 |