为什么要持久化?
redis 是内存数据库 如果不将内存中的数据库状态保存到磁盘中 那么一旦服务器中的数据库状态也会消失 所有redis 提供了持久化功能
RDB(redis database)
在指定的间隔时间内 将内存中数据集快照写入磁盘 也就是Snapshot快照 恢复时 是将快照文件直接读到内存中
redis会单独创建
一子进程来进行持久化:
一个子进程来进行持久化
会先将数据写入到一个临时文件中
待持久化过程都结束了
再用这个临时文件替换上次持久化的文件
主进程不进行任何io持久化操作
这就确保了极高的性能 如果需要进行大规模数据的恢复
且对于数据恢复的完整性不死非常明年 RDB要方式要比AOF方式更加高效
RDB的缺点是
最后一次持久化后的数据可能会丢失最后一次数据
我们默认的持久化是RDB 一般不需要修改这个配置
RDB保存的文件是 dump.rdb
都是在我们的redis,conf
触发机制生成dump.rdb
1、save 的规则满足的情况下 会自动触发rdb规则
2、执行flushall命令,也会触发我们的rdb规则
3、推出redis 也会产生rdb文件
如何恢复rdb文件
1、只需要将rdb文件放在我们的redis 启动目录 就可以
redis启动的时候就会自动检查dump.rdb文件 恢复其中的数据
2、查看需要存在的位置 使用
如果在这个目录下存在dump.rdb文件 启动就会自动恢复其中的数据
几乎就是他自己的默认的配置就够用了 但是我们还是要去学习
优点:
1、适合大规模的数据恢复! dump.rdb
2、如果对数据的完整性要求不高
缺点:
1、需要一定的时间间隔进行操作 如果rredis 意外宕机 这个最后一次 修改就没有的了
2、fork进程的时候 会占用内存空间
AOF(Append Only File)
将我们的所有命令都记录下来 history 恢复的时候就把这个文件全部执行一遍
以日志的形式来记录每个写的操作 将redis执行过的所有指令记录下来 只许追加文件但不可以改写文件
redis启动之初会读取该文件重新构建数据 redis重启的话 会根据日志文件的内容跟将写指令从前到后执行
一次以完成数据的恢复工作
默认是不开启的,我们需要手动进行配置 我们只需要将appendonly 改为yes 就开启了 AOF
重启Redis就生效了
如果aof文件有错位 这时候 redis 就是启动不起来我们要修复这个配置文件 aof文件
redis 提供了一个工具 redis-check-aof --fix
优点
1、每一次修改都同步文件的完整性更加好
2、每秒同步 可能会丢失一秒的数据
3、从不同步效率最高的
缺点
1、相对与数据文件来说 aof远远大于rdb,修复的速度也比rdb慢
RDB和AOF的实际应用
在主从复制中rdb 就是备用 在从机上面进程备份
扩展:1、RDB持久化 方式能够在指定的时间间隔内对数据进行快照存储
2、AOF持久化方式记录每次对服务器进行写的操作当服务器重启的时候会重新开始执行这些命令来恢复原始的数据 AOF命令以redis协议追加到保存每次写的操作 redis还能对aof文件进行后台重写 使AOF文件不至于过大
3、只做缓存 如果只希望数据在服务器运行的时候在 也可以不使用持久化