Redis 持久化(RDB 与AOF)

Redis 持久化

面试和工作,持久化都是重点! Redis 是内存数据库,如果不讲内存中的数据库保存到磁盘,那么一旦服务器进程退出 服务器中的数据库状态也会消失,所以Redis 提供持久化功能!

RDB(Redis DataBase)
什么是RDB
在出从复制中,rdb 就是备用了!从机上面!
Redis 持久化(RDB 与AOF)
文章图片

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。
Redis 会单独创建(fork)一个子进程来进行持久化,会将数据写入到一个临时文件中,持久化过程都结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程都是不进行任何IO 操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对越数据恢复的完整性不是非常敏感,那RDB 方式要比AoF 方式更加的高效,RDB 的缺点时最后一次持久化的数据可能丢失。我们默认的就是RDB,一般情况下不需要修改这个配置!
有时候在生产环境我们将这个文件进行备份!
rdb 保存的文件就是dump.rdb 都是在我们的配置文件中
Redis 持久化(RDB 与AOF)
文章图片

Redis 持久化(RDB 与AOF)
文章图片

命令设置密码
config set requirepass " "
触发机制
1.save 的规则满足的情况下,会自动触发rdb 规则(#save 60 5) 1分钟之内执行了5次
2.执行flushall 命令 也会触发我们rdb 规则!
3.退出redis ,也会产生rdb 文件!
备份就自动生成一个dump.rdb
Redis 持久化(RDB 与AOF)
文章图片

如果回复rdb 文件!
1.只需要将rdb 文件放在我们redis 启动目录就可以,redis 启动的时候会自动检查dump.rdb 恢复其中的数据!
2.查看需要存在的位置
config get dir 1) "dir" 2) "/usr/local/bin"# 如果在这个目录下存在dump.rdb 文件,启动就会自动恢复其中的数据

几乎就他自己的配置就够用了,但是我们还是需要去学习!
优点!
1.适合大规模的数据恢复! dump.rdb
2.如果你对数据的完整性要求不高!(save 60 10000 ) 59 s 突然宕机了,那这个10000 数据不会保存
缺点!:
1.需要一定的时间间隔进程操作!如果redis 意外宕机了这个最后一次修改数据就没有了!
2.fork 进程的时候,会占用一定的内存空间!!
AOF(Append Only File)追加文件
将我们的所有命令都记录下来,history ,恢复的时候就把这个文件全部执行一遍!
是什么
Redis 持久化(RDB 与AOF)
文章图片

以日志的形式来记录每个写操作,将Redis 执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis 启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以后完成数据的恢复工作
Aof 保存的时appendonly.aof 文件
Redis 持久化(RDB 与AOF)
文章图片

默认是不开启的,我们需要手动进行配置!我们只需要将appendonly 改为yes 就开启了aof!
重启,redis 就可以生效了!
如果这个aof 文件有错误,这时候redis 是启动不起来的,我们需要修复这个aof 文件
reids 给我们提供了这样一个工具 redis-check-aof --fix
Redis 持久化(RDB 与AOF)
文章图片

如果文件政策正常,重启就可以直接恢复了!
Redis 持久化(RDB 与AOF)
文章图片

优点和缺点:
Redis 持久化(RDB 与AOF)
文章图片

重写规则说明
aof 默认就是文件的无线追加,文件会越来越大!
Redis 持久化(RDB 与AOF)
文章图片
如果aof 文件大于64m, 太大了! fork 一个新的进程来将我们的文件进行重写!
优点:
1.每一次修改都同步,文件的完整性更好!2.每秒同步一次,可能会丢失一秒的数据3.从不同步,效率是最高的!
缺点:
1.相对于数据文件来说,aof 远远大于rdb,修复的速度也比rdb 慢!
2.Aof 运行效率也要比rdb 慢,所以我们redis 默认的配置就是rdb 持久化!
扩展
【Redis 持久化(RDB 与AOF)】Redis 持久化(RDB 与AOF)
文章图片

Redis 持久化(RDB 与AOF)
文章图片

    推荐阅读