redis持久化

redis持久化的两种方法(RDB、AOF)
1:RDB(Redis DataBase)
简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上
redis在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件

2:AOF(Append Only File)
就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了
我们通过配置redis.conf中的appendonly yes就可以打开AOF功能默认的AOF持久化策略是每秒钟fsync一次(可以通过修改配置文件来修改AOF持久化时间)
在进行AOF重写时,仍然是采用先写临时文件,全部完成后再替换的流程。

3:两种方法优缺比较
在同样数据规模的情况下,AOF文件要比RDB文件的体积大
AOF方式的恢复速度也要慢于RDB方式。

4:AOF文件损坏修复
1).备份被写坏的AOF文件
2).运行redis-check-aof –fix进行修复
3).用diff -u来看下两个文件的差异,确认问题点
4).重启redis,加载修复后的AOF文件

5:RDB实现原理
就是在某个时间点把内存中所有数据保存到磁盘文件中,这个过程既可以通过人工输入命令执行,也可以让服务器周期性执行。对于“把内存中的数据转存到磁盘中”这一过程,其实现无非就是通过定义好某种存储协议,然后按照该协议写入或读出(save和bgsave)。

6:AOF持久化实现原理
在重写即将开始之际,redis会创建(fork)一个“重写子进程”,这个子进程会首先读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
与此同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。
当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中。
当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值