【夯实Redis】Redis持久化
Redis两种持久化策略
RDB:周期性的备份缓存数据。
AOF: AOF是将所有的Redis的写命令记录到文件("appendonly.aof")中,这个文件叫做AOF文件。
备份文件如何处理
RDB备份方式会产生dump.rdb文件,AOF会产生appendonly.aof文件。实际生产上一般会同时开启这两种持久化方式。
Redis重启的时候,优先加载AOF文件,因为AOF文件备份的数据更加完整。
一般会把备份文件存放到第三方,例如阿里云文件服务器上。
生产上如何配置
实际生产上一般会同时开启这两种持久化方式。
RDB在redis.conf文件按照如下配置方案。
AOF在redis.conf文件按照如下配置方案。
RDB优缺点
(1)Redis重启读取RDB文件速度会快速与AOF文件
(2)RDB在备份文件的时候,会fork一个子进程,不会阻塞主进程。
(3)一般RDB备份周期会长于AOF备份方式,所以会比AOF丢失更多的数据。并且如果RDB文件特别大的话,fork得时候会暂停Redis服务数毫秒,甚至几秒。
AOF优缺点
(1)AOF是每隔1秒就执行备份一次,所以相对RDB方式丢失的数据少。
(2)但是AOF文件大于RDB文件,恢复速度也比RDB慢。
持久化遇到的坑
情景:开启rdb,关闭aof,待dump.rdb有数据后,再开启aof
现象:在已经有RDB文件的时候,且Redis此时是关机状态。修改配置文件开启AOF方式,重启Redis得时候优先读取AOF文件,则加载了一个空的AOF文件。现象就是Redis中未恢复任何备份数据。
解决方式:停止redis,关闭aof,重启redis,确保dump.rdb数据恢复在内存中,使用命令行热修改redis配置的方式打开aof,此时redis就会以aof持久化的形式将内存中的数据写入appendonly.aof文件,然后停止redis,修改配置文件将aof手动打开。
原文:redis持久化dump.rdb后,启用aof持久化,再重启redis,redis只会加载aof持久化的appendonly.aof文件,如果它不存在,那会创建一个新的空的文件,从而导致内存中丢失dump.rdb的数据。