系列文章目录
前言
提示:Redis持久化
提示:以下是本篇文章正文内容,下面案例可供参考
Redis持久化RDB
触发机制
-
save的规则满足的情况下,会自动触发rdb规则
-
执行flushall 命令,也会出发rbd规则
-
推出redis,也会产生rdb文件
备份就会自动生产一个durp.rdb文件
如何恢复rdb文件
-
只需要将rdb文件放在我们的redis的启动目录就可以,redis启动的时候会自动检查durp.rdb 回复文件中的数据
-
查看你需要存在的目录
[root@localhost ~]# redis-cli -p 6379
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis/6379" #如果在这个目录下存在durp.rdb文件,启动就会自动恢复其中的数据
127.0.0.1:6379>
RDB的优点
-
RDB文件是紧凑的二进制文件,比较适合做冷备,全量复制的场景
-
相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复Redis进程,更加快速
-
RDB对Redis对外提供的读写服务,影响非常小,可以让Redis保持高性能,因为Redis主进程只需要fork一个子进程,让子进程执行磁盘IO操作来进行RDB持久化即可
-
RDB使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了Redis的高性能
RDB的缺点
-
如果想要在Redis故障时,尽可能少的丢失数据,那么RDB没有AOF好、
-
RDB每次在fork子进程来执行RDB快照数据文件生成的时候,如果数据文件特别大,可能会导致对客户端提供的服务暂停数毫秒,或者甚至数秒
-
RDB无法实现实时或者秒级持久化
Redis持久化AOF
将我们的所有命令都记录下来 history 恢复的时候就把这个全部在执行一遍
AOF默认是不开启的,我们需要手动进行配置,我们只需要将appendonly改为yes就开启aof了
重启redis就可以生效了
如果这个aof 文件有错位,这时候redis是启动不起来的,我们需要修复这个aof文件
redis 给我们提供了一个工具 redis-check-aof --fix
修复后如果文件正常 重启就可以恢复了
AOF的优点
-
AOF可以更好的保护数据不丢失
-
AOF日志文件以append-only模式写入,写入性能比较高
-
AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写
-
适合做灾难性的误删除紧急恢复
AOF的缺点
-
对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大,恢复速度慢
-
AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然,每秒一次fsync,性能也还是很高的
-
以前AOF发生过bug,就是通过AOF记录的日志,进行数据恢复的时候,没有恢复一模一样的数据出来
RDB和AOF到底该如何选择
1、不要仅仅使用RDB,因为那样会导致你丢失很多数据;
2、也不要仅仅使用AOF,因为那样有两个问题:
你通过AOF做冷备,没有RDB做冷备,恢复速度更快; 第二,RDB每次简单粗暴生成数据快照,更加健壮,可以避免AOF这种复杂的备份和恢复机制的bug
3、综合使用AOF和RDB两种持久化机制,用AOF来保证数据不丢失,作为数据恢复的第一选择;
用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,还可以使用RDB来进行快速的数据恢复