redis:redis的持久化

在redis中提供了俩种数据持久化的方式:1.RDB 2.AOF

1.RDB持久化

RDB全称Redis Database Backup file(redis 数据备份文件),也叫redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当redis实例故障重启后,从磁盘读取快照文件,恢复数据。

1.主动备份方式:执行命令

image-20240308164605865

2.修改配置文件redis.conf 开启备份

image-20240308164744277

1.1RDB的执行原理

bgsave开始时会fork(克隆)主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入RDB文件。

因为所有的进程无法直接操作物理内存,所以由操作系统给每个进程分配一个虚拟内存,每个进程只能操作自己的虚拟内存,操作系统会维护一个虚拟内存到物理内存的映射关系表,称作页表。

image-20240308165901508

如果此时子进程在写RDB文件的时候主进程得到用户的请求在修改物理内存数据,此时可能会出现一些脏数据,为了避免这种情况发生,fork底层采用了copy-on-write技术:

  • 当主进程执行读操作时候,访问共享内存
  • 当主进程执行写操作时候,则会拷贝一份数据,执行写操作

image-20240308170307734

2.AOF持久化

AOF全称为Append Only File (追加文件)。Redis处理每一个写命令都会记录在AOF文件中,可以看做是命令日志文件。

修改redis.conf打开AOF持久化:

image-20240308170620604

记录频率设置:

image-20240308171007380

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

image-20240308171438447

对比

image-20240308171947792