这两天在学习Redis,了解到了Redis的持久化,其中包括RDB和AOF。
- RDB(Redis DataBase):
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时将快照文件直接读到内存里。Redis会单独创建(Fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。
RDB保存的是dump.rdb文件
如何恢复:将备份文件(dump.rdb)移动到redis安装目录并启动服务即可
优势:①适合大规模的数据恢复②对数据完整性和一致性要求不高
- AOF(Append Only File):
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话根据日志文件的内容将写指令从前到后执行一次已完成数据的恢复工作。
AOF保存的是appendonly.aof文件
优势:
每秒同步:appendfsync always 同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
每修改同步:appendfsync everysec 异步操作 ,每秒记录 如果一秒内宕机,有数据丢失。
不同步:appendfsync no 从不同步
- 如何选择?
RDB和AOF可以共存,但是恢复的时候找的是AOF,如果AOF文件异常,可以通过check-aof进行AOF修复。