Redis持久化
redis是内存数据库,如果不持久化,断电即失
在主从复制中,持久化就是用来备用的
RDB持久化
RDB的工作流程:
- 在指定的时间间隔内将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读入内存里。
- redis会单独fork(创建)一个子进程来进行持久化,会先将数据写入一个临时文件中,待持久化过程都结束了,再用这个临时文件替换旧的持久化文件。
- 主线程不进行持久化IO操作,性能较高
- RDB比AOF高效,但最后一次持久化后的数据可能丢失
保存文件 默认名dump.rdb
dbfilename dump.rdb
配置文件中这里可以修改文件名
配置:
save 900 1 #900秒内,一条数据发生改变,则进行持久化操作
save 300 10 #300秒内,10条数据发生改变,则进行持久化操作
save 60 10000 #...
触发机制
- save规则满足触发
- 执行flushall ,shoudown,退出redis也会触发
rdb文件如何重新恢复为内存
127.0.0.1:6379> config get dir
1) "dir"
2) "/var/lib/redis" # 在这个目录下存在 dump.rdb文件,启动就会自动恢复其中的数据
优点: 适合大规模的数据恢复,效率高。对数据的完整性要求不高,可以使用
缺点: 需要一定的时间间隔才会执行备份操作,如果这个时间宕机了,那么最后一次修改的数据就会没有了。fork(创建)子进程的时候,会占用一定的内存空间。
AOF持久化(Append Only File) 追加文件
将我们所有写命令都记录下来,恢复的时候把这个文件全部再执行一遍
- 以日志的形式来记录每个写操作,只许追加文件,但不允许修改文件,redis启动之初会读取文件,重新构建数据 效率低
- aof保存的文件是appendonly.aof文件
appendonly no #默认关闭
appendfilename "appendonly.aof" #保存文件名
# appendfsync always #写入间隔 每次写操作
appendfsync everysec #每秒
# appendfsync no #从不
auto-aof-rewrite-percentage 100 #重写百分比 百分之百
auto-aof-rewrite-min-size 64mb #超过 64mb会重写生成个文件
如果使用aof持久化且aof文件有错误,redis将启动不起来的,我们需要修复aof配置文件。
redis给我们提供了一个工具redis-check-aof --fix appendonly.aof
优点: 每秒(或者每一次)修改都同步,完整性更好
缺点: aof数据文件特别大,恢复速率也特别慢