这是我参与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