Redis提供了两种持久化策略: RDB
和 AOF
1 RDB持久化 - 默认持久化方式
1.1.1. 快照文件名称设置
通过 redis.conf 中的 dbfilename 设置
默认值: dbfilename “dump.rdb”
1.1.2. 快照文件存放位置
通过 redis.conf 中的 dir 设置
默认值: dir ./ 表示在redis的安装目录
1.1.3. 快照(RDB持久化)策略配置
save 900 1 900秒内至少有一个key被改变就自动触发RDB持久化
save 300 10 300秒内至少有10个key被改变就自动触发RDB持久化
save 60 10000 60秒内至少有10000个key被改变就自动触发RDB持久化
增加5秒内有一个可以被修改就触发RDB持久化
save 4 1
27329:M 24 Oct 2020 11:50:01.920 * 1 changes in 4 seconds. Saving…
27329:M 24 Oct 2020 11:50:01.921 * Background saving started by pid 27359
27359:C 24 Oct 2020 11:50:01.923 * DB saved on disk
27359:C 24 Oct 2020 11:50:01.924 * RDB: 4 MB of memory used by copy-on-write
27329:M 24 Oct 2020 11:50:02.022 * Background saving terminated with success
1.2. RDB持久化过程
RDB持久化是Redis定期将内存中的 数据集快照
写入磁盘,实际操作过程是创建一个子
进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储,
整个过程 主进程
不进行任何IO操作,保证Redis的高效性。
1.3. RDB持久化的触发方式
分为自动触发
和 手动触发
1.3.1. 自动触发:从redis.conf中配置
默认配置
save 900 1 900秒内至少有一个key被改变就自动触发RDB持久化
save 300 10 300秒内至少有10个key被改变就自动触发RDB持久化
save 60 10000 60秒内至少有10000个key被改变就自动触发RDB持久化
1.3.2 手动触发
save
执行此命令会阻塞Redis服务器,执行命令期间,Redis不能处理其它命令,
直到RDB过程完成为止。
执行日志如下
27329:M 24 Oct 2020 11:54:22.134 * DB saved on disk
bgsave
执行该命令时,Redis会在后台异步进行快照操作,做快照的同时还可以响
应客户端请求;此时Redis主进程执行fork操作创建子进程,RDB持久化过程由子
进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。
执行日志如下:
27329:M 24 Oct 2020 11:54:42.069 * Background saving started by pid 27367
27367:C 24 Oct 2020 11:54:42.077 * DB saved on disk
27367:C 24 Oct 2020 11:54:42.077 * RDB: 4 MB of memory used by copy-on- write
27329:M 24 Oct 2020 11:54:42.162 * Background saving terminated with success
2.AOF持久化
AOF持久化以日志的形式
记录服务器所处理的每一个写、删除操作,查询操作不会记
录,以文本的方式记录,可以打开文件看到详细的操作记录。
2.1.1 aof文件名称设置
使用redis.conf
中的appendfilename
设置
默认设置:appendfilename "appendonly.aof"
2.1.2 如何开启aof持久化
使用 redis.conf
中的 appendonly yes
设置
默认设置: appendonly no
表示不开启aof持久化
2.1.3 aof文件存放位置
通过 redis.conf
中的 dir
设置
默认值: dir ./
表示在redis的安装目录
2.2.1Redis支持三种同步AOF文件的策略
通过redis.conf中的 appendfsync设置
no : 不进行同步,依靠操作系统来进行同步. Faster. always : always表示每次有写操作都进行同步. Slow, Safest. everysec : 表示对写操作进行累积,每秒同步一次. Compromise.
默认是"everysec",按照速度和安全折中这是最好的。