Redis持久化问题
RDB (Redis Database Backup File)
Redis数据快照
将内存中的所有数据都记录到磁盘中做快照
当Redis实例故障重启时,从磁盘读取快照文件恢复数据
使用
save/bgsave
命令进行手动快照
save使用主进程执行RDB,对所有命令都进行阻塞
bgsave使用子进程执行RDB不会阻塞
在配置文件中可以设置触发RDB的机制
以save [时间] [修改key次数] 的格式设置
RDB的执行原理
Redis主进程在虚拟内存中生成记录虚拟地址和物理地址映射关系的页表
bgsave开始时fork主进程得到子进程,子进程复制了主进程的页表数据
子进程根据页表的映射对内存数据写入RDB文件
fork底层使用copy-on-write技术
每次写数据时先拷贝一份数据,读数据时从拷贝数据中读取,避免脏数据
AOF(Append Only File)
记录Redis处理的每一个写命令(命令日志文件)
通过修改配置文件
appendonly yes
开启AOF
同时可以通过配置文件来修改AOF记录的频率
分为
always/everysec(默认)/no
AOF文件会远大于RDB文件,因为是记录命令而且会记录对同一个key的多次写操作
我们可以执行bgrewrite命令来让AOF执行重写功能来只记录最后一次写操作
可以在配置文件中对触发阈值进行配置
auto-aof-rewrite-percentage 100//根据增长百分比进行触发
auto-aof-rewrite-min-size 64mb//根据设置文件大小上限进行触发