目录
Redis持久化:
能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据。
Redis有2种持久化策略:RDB与AOF
RDB
RDB持久化是把当前进程数据生成快照保存到硬盘的过程。
触发机制:
一、手动触发:
save:
阻塞当前Redis服务器,直到RDB过程完成为止。 对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。
命令:DB saved on disk
bgsave:
在后台异步执行快照操作,不会阻塞客户端的请求。
Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。
二、自动触发
自己配置快照规则
save <seconds> <chages>
save 900 1 // 当在900秒内被更改的key的数量大于1的时候,就执行亏按照
save 300 10
save 60 10000
RDB文件处理:
保存:
RDB文件保存在dir配置指定的目录下,如果没有修改的话,在redis启动安装的目录下dup.rdb.
可以通过config set dir {newDir}和config set dbfilename{newFileName}运行期动态执行,当下次运行时RDB文件会保存到新目录。
压缩:
默认采用LZF算法对生成的RDB文件做压缩处理,压缩后的文件远远小于内存大小,默认开启。可通过参数config set rdbcompression {yes|no}动态修改。
RDB优缺点:
AOF
以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。
实时持久化
工作流程:
开启AOF:
需要设置配置:appendonly yes,默认不开启
AOF文件名可以通过appendfilename配置设置,默认文件名是appendonly.aof
AOF缓冲区同步磁盘策略:
在Redis的配置文件中存在三种同步方式,它们分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。
AOF重写
AOF通过追加写命令到文件实现持久化,因为不断追加命令,所以AOF文件体积逐渐变大,需要定期执行重写操作来看降低文件体积。
# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
重启加载
AOF和RDB 文件都可以用于服务器重启时的数据恢复。
如下表示Redis持久化文件加载流程: