Redis持久化(详解+图)
目录
redis持久化(解决数据丢失问题)
RDB持久化:
执行时机:
RDB配置
RDB原理:
RDB缺点:
RDB优点:
AOF持久化
AOF原理
AOF配置
AOF文件重写
RDB和AOF对比
redis持久化(解决数据丢失问题)
两种方式:RDB和AOF
RDB持久化:
数据快照,当redis故障重启后,会从磁盘读取快照文件(RDB文件)恢复数据
执行时机:
执行save命令 (会在主进程执行RDB,导致其他命令阻塞)
执行bgsave命令 (会开启独立进程异步执行RDB,主进程可以持续处理请求)
redis故障停机时 (redis停机时,会执行save,实现redis持久化)
触发RDB条件时 (redis.conf文件中配置,执行bgsave)
RDB配置

RDB原理:

redis执行bgsave时,fork主进程得到一个子进程,子进程复制父进程的物理内存页表
父进程处理写请求时,会把要修改的数据创建副本
子进程读取内存空间,得到新的RDB文件
用新的RDB文件替换旧的RDB文件
RDB缺点:
RDB执行时间长,两次RDB之间写入数据有丢失的风险
fork子进程,压缩RDB文件,比较耗时
RDB优点:
RDB文件是一个紧凑压缩的二进制文件,适合备份、全量复制等场景
加载RDB文件恢复数据远远快于AOF
AOF持久化
AOF原理
redis处理的每一条写命令,都会记录在AOF文件中,可以看做是命令日志文件。

AOF配置

AOF文件重写
因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

如图,AOF原本有三个命令,但是set num 123 和 set num 666都是对num的操作,第二次会覆盖第一次的值,因此第一个命令记录下来没有意义。
所以重写命令后,AOF文件内容就是:mset name jack num 666
Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf中配置:
# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb
RDB和AOF对比

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
