RDB和AOF的持久化配置
发布日期:2021-05-06 23:31:00 浏览次数:25 分类:技术文章

本文共 1641 字,大约阅读时间需要 5 分钟。

文章目录

RDB相关

1.如何配置RDB持久化

在redis.conf文件中:

# 设置检查点save 900 1save 300 10save 60 10000# 配置 dir 指定 rdb 快照文件的位置dir /var/redis/6379# 配置 dbfilename 指定 rdb 快照文件的名称dbfilename dump.rdb

每隔60s,如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,就是当前redis内存中完整的数据快照,这个操作也被称之为snapshotting,快照。

可以手动调用save或者bgsave命令,同步或异步执行rdb快照生成

save可以设置多个,就是多个snapshotting检查点,每到一个检查点,就会去check一下,是否有指定的key数量发生了变更,如果有,就生成一个新的dump.rdb文件

2.RDB持久化机制的工作流程

(1)redis根据配置自己尝试去生成rdb快照文件

(2)fork一个子进程出来
(3)子进程尝试将数据dump到临时的rdb快照文件中
(4)完成rdb快照文件的生成之后,就替换之前的旧的快照文件

dump.rdb,每次生成一个新的快照,都会覆盖之前的老快照

3.基于RDB的数据恢复

在Redis中保存几条数据后立刻执行 redis-cli SHUTDOWN 停掉Redis进程、重启,刚才插入的数据还在!因为redis-cli SHUTDOWN是一种安全退出模式,退出时会生成完成的RDB快照。

如果用kill -9的方式杀死Redis进程,数据就丢了。因为数据没有进dump.rdb文件,所以就丢了。

AOF相关

1.如何配置AOF持久化

在redis.conf文件中:

# 默认关闭AOF,设置为yes可打开,命令会先进入os cache,后fsync进入磁盘appendonly no# 配置fsync策略:always每条执行一次fsync、everysec每秒执行一次fsync、no从不执行# appendfsync alwaysappendfsync everysec# appendfsync no# 配置aof文件名appendfilename "appendonly.aof"# 配置重写合并策略auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb

2.AOF持久化机制的工作流程

(1)redis fork一个子进程

(2)子进程基于当前内存中的数据,构建日志,开始往一个新的临时的AOF文件中写入日志
(3)redis主进程,接收到client新的写操作之后,在内存中写入日志,同时新的日志也继续写入旧的AOF文件
(4)子进程写完新的日志文件之后,redis主进程将内存中的新日志再次追加到新的AOF文件中
(5)用新的日志文件替换掉旧的日志文件

关于重写合并策略:比如上一次rewrite后是128M,不过再写的增长比例超过上次的100%,且大于min-size,才会去触发rewrite

3.破损文件修复

如果redis在append数据到AOF文件时,机器宕机了,可能会导致AOF文件破损

用redis-check-aof --fix命令来修复破损的AOF文件

AOF和RDB同时工作

(1)如果RDB在执行snapshotting操作,那么redis不会执行AOF rewrite; 如果redis再执行AOF rewrite,那么就不会执行RDB snapshotting

(2)如果RDB在执行snapshotting,此时用户执行BGREWRITEAOF命令,那么等RDB快照生成之后,才会去执行AOF rewrite
(3)同时有RDB snapshot文件和AOF日志文件,那么redis重启的时候,会优先使用AOF进行数据恢复,因为其中的日志更完整

上一篇:Redis主从复制原理
下一篇:数据如何从HBase读到MR

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月01日 15时17分46秒