Redis的持久化方式

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
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值