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配置

Redis持久化(详解+图)_第1张图片

RDB原理:

 Redis持久化(详解+图)_第2张图片

redis执行bgsave时,fork主进程得到一个子进程,子进程复制父进程的物理内存页表

父进程处理写请求时,会把要修改的数据创建副本

子进程读取内存空间,得到新的RDB文件

用新的RDB文件替换旧的RDB文件

RDB缺点:

RDB执行时间长,两次RDB之间写入数据有丢失的风险

fork子进程,压缩RDB文件,比较耗时

RDB优点:

RDB文件是一个紧凑压缩的二进制文件,适合备份、全量复制等场景

加载RDB文件恢复数据远远快于AOF

AOF持久化

AOF原理

redis处理的每一条写命令,都会记录在AOF文件中,可以看做是命令日志文件。

Redis持久化(详解+图)_第3张图片

AOF配置

Redis持久化(详解+图)_第4张图片

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对比

Redis持久化(详解+图)_第5张图片

你可能感兴趣的:(java,redis,缓存,数据持久化)