Redis數據持久化

Redis數據持久化

一、Redis實現數據持久化的兩種實現方式:

RDB:指定的時間間隔內保存數據快照
AOF:先把命令追加到操作日誌的尾部,保存所有的歷史操作

二、RDB實現Redis數據持久化(默認方式)

1、配置redis.conf

查找redis.conf

[[email protected] ~]$ rpm -ql redis
/etc/logrotate.d/redis
/etc/redis-sentinel.conf
/etc/redis.conf

配置數據持久化

vi /etc/redis.conf
save 900 1       #指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
save 300 10      #分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。
save 60 10000

dbfilename dump.rdb   #指定本地數據庫文件名,默認值爲dump.rdb

dir /var/lib/redis    #指定本地數據庫存放目錄

數據持久化後保存的文件

[[email protected] miaocunfa]# cd /var/lib/redis
[[email protected] redis]# ll
total 2624
-rw-r--r-- 1 redis redis 2683923 Nov 29 17:31 dump.rdb

2、RDB的缺點:

因爲是特定條件下進行一次持久化(每隔一段時間),就可能會發生一旦redis崩潰,再次恢復時,可能會導致部分數據丟失。
注:如果設置的備份時間間隔較短,比較耗服務器性能,如果設置的備份時間間隔較長,又可能會導致數據恢復時部分數據丟失。

三、AOF持久化方案

先把命令追加到操作日誌的尾部,保存所有的歷史操作。

1、相比於RDB持久化方案的優點:

(1)數據非常完整,故障恢復丟失數據少
(2)可對歷史操作進行處理

2、開啓AOF持久化

vi redis.conf
appendonly yes                    # 打開AOF模式
appendfilename "appendonly.aof"   # 操作日誌文件名
appendfsync everysec              # AOF同步方式,每秒一次

3、驗證AOF

# 連接redis進行操作
[[email protected]_server ~]# redis-cli
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> set name miao
OK
127.0.0.1:6379[5]> set day fri
OK
127.0.0.1:6379[5]> get name
"miao"
127.0.0.1:6379[5]> get day
"fri"
127.0.0.1:6379[5]> exit
[[email protected]_server ~]#

# 打開AOF操作日誌,剛纔的操作都被記錄在內。
[[email protected]_server redis]# cat appendonly.aof 
*2
$6
SELECT
$1
5
*3
$3
set
$4
name
$4
miao
*3
$3
set
$3
day
$3
fri

4、缺點

(1)因爲AOF模式要把每一步redis命令都記錄下來,所以就導致文件的體積會很大
(2)而且會導致速度低於RDB,並且恢復速度慢

四、總結:

在實際應用中,根據場景不同,選擇的方式也不盡相同,各有優缺點。但我個人看法,RDB的快照方式相比於AOF的逐步記錄模式要好一些。至於RDB丟數據的風險,我們完全可以通過控制備份的時間間隔來避免這個問題。當然,也是可以兩種方式同時使用的,只是大多不會這麼做。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章