redis的RDB和AOF总结

316 阅读2分钟

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

前言

reids给我们提供了两种数据持久化方式:RDB和AOF,他们可以将内存中的数据写入到磁盘中,这样当redis出现重启的时候可以保证数据不丢失。

RDB

1. 配置

dir:存储目录

dbfilename:默认为dump.rdb

2.redis执行快照的时机

在redis.conf修改:save m n 意思为在m秒内至少n个键被修改则进行rdb

使用config set save 可以配置三条六个数字,每个数字空格隔开

通过save或bgsave命令来执行redis快照。save使用当前进程,阻塞;bgsave使用子进程后台执行

3.文件修复命令

redis-check-dump dump.rdb

4.缺点

会丢失最后一次快照以后更改的所有数据

5.执行快照的过程

①.redis通过fork函数复制一个当前进程状态的子进程

②.把子进程中的数据拷贝到临时文件中

③.使用临时文件替换dump.rbd

6.关闭快照

redis.conf中的save "",其他的save属性注释掉

AOF

1.配置

appendonly yes:开启

dir:设置目录,默认./

appendfilename:默认appendonly.aof

2.理论

AOF持久化(即Append Only File持久化),则是将Redis执行的每次写命令记录到单独的日志文件中(有点像MySQL的binlog);

redis重启优先使用AOF方式来恢复数据,所以第一次开启冲重启没有数据(在cli中使用config set appendonly yes,重启,再修改配置回复)

3.同步时机

appendsync always:每次操作都会同步

appendsync everysec:默认,每一秒执行一次同步

appendsync no:不主动同步,操作系统来做,30s一次

4.日志文件重写

把Redis进程内的数据转化为写命令,同步到新的AOF文件;不会对旧的AOF文件进行任何读取、写入 子进程把数据转为写指令存入新的AOF文件时,记录的只是每个数据的最后一次写指令,也就是最新的数据,不会记录之前冗余的操作

定期重写AOF文件,通过合并命令,清除无效s护具,减小AOF文件的体积

①.auto-aof-rewrite-percentage 100:当aof文件超过上一次重写文件百分之100时,重写,第一次重写以打开文件大小为准

②.auto-aof-rewirte-min-size 64mb:文件到达64MB时重写 手动执行重写命令行中bgrewriteaof

5.文件修复命令

redis-check-aof --fix appendonly.aof