Redis提供了两种持久化策略: RDB 和 AOF
1.1RDB 持久化-默认持久化方式
1.如何设置文件名称
通过redis.conf中的dbfilename设置
默认值:dbfilename "dump.rdb"
2.如何设置快照存放的位置
通过redis.conf 中的dir设置
默认值:dir ./ 表示在执行redis-server 命令目录下生成文件
3.快照(RDB持久化) 策略配置
save 900 1 900秒内有一个修改就执行持久化
save 300 10 300秒内有10个修改就执行持久化
save 60 10000 60秒内有一万个修改就执行持久化
自己定义一个5秒内有一个change就可以被修改就触发的RDB持久化
save 5 1
随便从建立的cli 里面写一点东西做出change来触发持久化,产生的log
4073:M 01 Nov 2021 09:28:07.392 * 1 changes in 4 seconds. Saving...
4073:M 01 Nov 2021 09:28:07.393 * Background saving started by pid 4102
4102:C 01 Nov 2021 09:28:07.397 * DB saved on disk
4102:C 01 Nov 2021 09:28:07.399 * RDB: 4 MB of memory used by copy-on-write
4073:M 01 Nov 2021 09:28:07.493 * Background saving terminated with success
4.RDB持久化的过程
RDB持久化是Redis定期将内存中的 数据集快照 写入磁盘,实际操作过程是主进程创建一个子进程, 先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储,整个过程 主进程 不 进行任何IO操作,保证Redis的高效性。
5.RDB持久化的触发方式
自动触发和手动触发
自动触发即为 从 redis.conf 中配置即可
手动方式;
save 和 bgsave
save 会阻塞redis 服务因为是主线程自己进行RDB操作,执行命令期间redis 不能去处理其他的命令,直到RDB过程完成为止.
4073:M 01 Nov 2021 09:33:34.693 * DB saved on disk
bgsave 执行该命令,Redis 会在后台异步进行快照操作,做快照的同时还可以响应客户端请求,此时Redis主进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束.阻塞只会发生在fork阶段,一般时间都很短暂.
4073:M 01 Nov 2021 09:34:35.537 * Background saving started by pid 4112
4112:C 01 Nov 2021 09:34:35.543 * DB saved on disk
4112:C 01 Nov 2021 09:34:35.545 * RDB: 6 MB of memory used by copy-on-write
4073:M 01 Nov 2021 09:34:35.644 * Background saving terminated with success
1.2 AOF 持久化
AOF持久化以日志的形式 记录服务器所处理的每一个写操作和删除操作,以文本的方式记录,可以打开文件看到详细的操作记录.
1.AOF文件名称设置
使用redis.conf 中的 appendfilename 设置
默认设置: appendfilename "appendonly.aof"
2.如何开启AOF持久化
使用 redis.conf 中的 appendonly yes 设置
默认设置;appenonly no 表示不开启 aof 持久化
3.AOF文件存放的位置
在redis.conf 中的 dir 设置
默认值: dir ./ 表示在执行 redis-server 命令的目录下生成文件
4.Redis 支持三种同步AOF文件的策略
通过redis.conf中的 appendfsync 设置
1.no 不进行同步,依靠操作系统来进行同步,Faster
2.always ;always表示每次有写操作都进行同步.Slow,Safest.
3.everysec:表示对写操作进行积累,每秒同步一次.Compromise (默认方案,最合适的方案)