Redis的持久化机制
Redis持久化机制的概念
Redis是一个内存型数据库,为了保证服务器出现宕机或其他意外导致服务器停止时数据不丢失。
Redis提供了两种持久化机制,RDB和AOF机制,当服务重启时利用之前的持久化文件即可实现数据恢复。
RDB持久化机制
RDB机制也称Snapshotting,是通过将当前进程中的数据以快照文件的方式保存到磁盘,实现数据的持久化。
Snapshotting(RDB)机制的运行原理
redis将当前进程状态以一个快照文件的形式保存, 当服务出现异常, 重启redis服务时, 会自动将磁盘上的快照文件读取到内存中,完成数据的恢复。
1、Redis通过fork产生子进程;
2、父进程继续处理client请求,子进程负责将快照写入临时文件;
3、子进程写完后,用临时文件替换原来的快照文件,然后子进程退出。
rdb持久化的优缺点
优点:
1、 rdb快照文件是经过算法压缩后生成的,所以rdb文件比实际内存中的数据要小。 文件小,所以恢复数据速度快。
2、 我们可以将一个rdb快照文件, 传送给远程的服务器,完成备份。
缺点:
1、无法实现秒级的备份
2、不同版本之间的rdb快照文件格式存在差异, 不同版本的rdb快照文件不兼容
AOF持久化机(append only file)
AOF持久化是指, redis将当前进程中的数据以命令日志文件的方式保存到磁盘。 当重启redis服务时,再将命令日志文件读取到进程中, 将所有的命令执行一遍,完成数据的恢复。
Append-Only File(AOF)机制的运行原理
1、Redis 通过fork一个子进程
2、父进程继续处理client请求,子进程把AOF内容写入缓冲区;
3、子进程写完退出,父进程接收退出消息,将缓冲区AOF写入临时文件;
4、临时文件重命名成appendonly.aof,原来文件被覆盖,整个过程完成。
优点
1、 命令日志文件的可读性较好。
2、 可实现秒级备份
缺点
1、 命令日志文件比较大。 数据的恢复较慢 。
RDB和AOF对比
持久化技术 | 优势 | 缺陷 |
---|---|---|
Snapshotting | 1、RDB产生的文件小。2、RDB恢复快,并且简单,例如你可以快速的将RDB文件传输到其他主机,做数据的恢复。3、在进行RDB备份的时候,主进程仅仅需要创建一个子进程,所有的I/O操作都由子进程完成 | 1、无法做到实时秒级持久化,在两个备份点之间可能会发生数据丢失 2、生成的RDB二进制文件,会存在新老版本兼容的问题。 |
AOF | 1、数据的备份粒度更小,数据安全性更高。2、AOF只会对日志文件进行追加操作,不会修改已经写好的内容。即使在掉电的情况下,AOF日志仍然是可用的 | 1、AOF文件通常比相同的数据集的RDB文件更大。2、AOF写日志可能会很慢,这跟fsync的机制有关。 |
总结
快照易丢失数据,AOF模式较为安全,但日志重写时磁盘io开销大,容易导致服务器性能严重下降,并且需要足够的物理内存,这个比较危险,所以在高性能服务器上一般是用主从复制来进行持久化