redis持久化

Redis提供RDB和AOF两种数据持久化方式。RDB是内存快照,通过bgsave非阻塞方式保存,利用copy-on-write技术避免数据冲突。AOF记录命令日志,可重写优化。结合两者能提高数据安全性。
摘要由CSDN通过智能技术生成

目录

RDB

人工主动备份(bgsave)

条件自动备份

RDB执行原理

copy-on-write技术

AOF

总结

​编辑


在Redis中提供了两种数据持久化的方式:1、RDB 2、AOF

RDB

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

快照文件称为RDB文件,默认是保存在当前运行目录。

人工主动备份(bgsave)

 假如保存的文件较大,由于save是使用主进程来操作,因此会阻塞其它操作,所以需要开启子进程避免其它操作受到影响

条件自动备份

Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

以上表达的意思为3600秒内有一次修改就做一次RDB操作

你也可以根据实际需求来修改自动RDB的频率

RDB执行原理

由于在Linux中所有的进程都无法直接操作物理内存,而是由操作系统给每个进程分配一个虚拟内存,然后主进程只能操作虚拟内存,而后操作系统会维护一个虚拟内存与物理内存映射关系的表(页表)。

所以主进程操作虚拟内存,虚拟内存通过页表的映射关系到物理内存

Redis 在持久化时会调用 glibc 的函数 fork 创建一个子进程,fork时会把主进程的页表做拷贝到子进程,因此子进程有了与主进程相同的映射关系。当子进程操作自己的虚拟内存时因为与主进程的映射关系一样,所以就会映射到相同的物理内存区域。当子进程RDB时会写入一个新的RDB文件,写完之后在替换旧的RDB文件。

因此就实现了无需拷贝内存中的数据也能实现共享,这样就执行的时间就更快,阻塞的时间就更短

当子进程在RDB时会读取内存中的数据,但如果此时主进程在修改数据那么读与写会产生冲突,甚至会出现脏数据

copy-on-write技术

为了解决读写冲突fork采用的是copy-on-write技术:

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

 

AOF

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

AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:

AOF的命令记录的频率也可以通过redis.conf文件来配:

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

Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf中配置:

总结

RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,可以结合两者来使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值