Redis的持久化方式

本文详细解释了Redis的两种数据持久化方法:RDB(RedisDatabaseBackupfile)通过定期保存内存数据到磁盘,包括save和bgsave,但存在数据丢失风险和性能消耗;AOF(Append-OnlyFile)记录每个写操作,提供更安全但文件较大。

1.RDB

RDB全称(Redis Database Backup file)(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,redis从dump.rdb文件读取,恢复数据。这有两种方式执行RDB机制:

1.save

2.bgsave(自动save)

如果在900s内至少有1个key被修改,那么就执行RDB机制。

bgsave时主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入RDB文件。下图为RDB的底线原理。主进程不能直接操作物理内存,而是操作虚拟内存,而虚拟内存通过页表间接操作物理内存,从而实现对物理内存的读写。

在执行bgsave时,主进程fork子进程,将页表复制过去,由于子进程共享父进程的页表,因此,子进程也能通过页表访问物理内存,从而写入新的RDB文件。

但是这里会出现一种场景:

就是子进程从物理内存读数据,而主进程从物理内存中写数据。因此会出现一些脏数据,针对这种情况:fork采用的是copy on write技术。

当主进程执行读操作时,访问共享内存。

当主进程执行写操作时,则会拷贝一份数据,执行写操作。

RDB在什么时候执行呢?

1.默认是服务停止时。

2.手动save

3.bgsave (save 60 1000) 代表60s内至少执行1000次修改则触发RDB

RDB的缺点?

1.如果每60save一次,如果在60s内执行写操作,一旦宕机,这数据就丢失了。

2.fork子进程、写出RDB都比较耗时。

2.AOF

为了解决上述问题,引入了另外一种方式aof(append only file)(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看作是命令日志文件。

AOF记录的是所有的写操作,如果说一个操作写很多次也会记录下来,因此aof文件的大小一定比rdb大。我们可以通过执行bgrewriteaof命令,让aof文件执行重写aof文件。阈值也可以在redis.conf中配置

总结一下RDB和AOF的优缺点:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值