- Redis提供了两种不同形式的持久化,RDB(Redis DataBase)和AOF(Append Of File)
1、RDB
在指定的时间间隔里,将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存里。
1.1如何进行备份:
Redis会单(fork)独创建一个子进程(和父进程完全相同)来进行持久化,会先将一个数据写到临时文件中,等持久化过程都结束了,再将临时文件替换为上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。
1.2rdb文件的保存
在Redis.conf配置文件名称,默认为dump.rdb,同时也可以修改保存路径
1.3rdb的保存策略
自动:
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
#
# Note: you can disable saving completely by commenting out all "save" lines.
#
# It is also possible to remove all the previously configured save
# points by adding a save directive with a single empty string argument
# like in the following example:
#
# save ""
# 在多少秒完成对数据库的多少次更改,就会进行持久化
save 900 1 #900秒完成一次更改就进持久化操作
save 300 10
save 60 10000
在进行数据操作时,没有满足保存策略,可能会造成最后一次持久化的数据丢失
Redis非正常关闭时,会造成持久化数据丢失
正常退出Redis,shutdown,数据也会进行持久化
手动:
save命令:只管保存,全部阻塞
1.4rdb的恢复
先关闭Redis
把备份的rdb文件拷贝到工作目录下
启动Redis,备份数据会自动加载
1.5rdb的优点
节省磁盘空间(保存数据)
恢复速度快
1.6rdb的缺点
- 虽然Redis在fork时使用了写时拷贝技术,但是数据庞大还是很消耗性能的
- 在一定时间间隔做一次备份,如果Redis意外宕机,就会丢失最后一次快照的所有修改
2、AOF
- 以日志的形式记录每个写操作,将Redis执行过程的所有写指令记录下来(读操作不记录),只许追加文件不能改写文件。Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
- AOF默认不开启,需要手动在配置文件中开启,保存路径与RDB保存一致。默认appendonly.aof
appendonly yes
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
- AOF的备份机制和性能虽然和RDB不同,但是备份和恢复和RDB一样
- AOF和RDB同时开启,系统默认取AOF的数据
- AOF同步频率设置
# appendfsync always #每次Redis的写入都会立即记入日志
appendfsync everysec #每秒记入日志一次,如果宕机本秒数据可能丢失
# appendfsync no #把同步时机交给操作系统
重写
aof采用文件追加方式,文件会越来越大,为了避免增加了重写机制,当aof文件的大小超过所设定的值时就会启动AOF的内容压缩,只保留可以恢复数据的最小指令集
AOF的优点
备份机制更稳健,数据丢失概率低
AOF的缺点
比RDB占用更多的磁盘空间
恢复备份速度慢(重新执行一遍指令)
每次读写都同步的话,有一定的压力
存在bug 造成恢复不能