redis 持久化机制有两种:RDB 和 AOF。
RDB
RDB 机制是对 redis 中的数据执行周期性的持久化。每个几分钟、几小时、几天生成 redis 内存中的数据的一份完整的快照。
AOF
每条写入命令作为日志,写入 aof 文件中。现代操作系统中,写入文件不是直接写磁盘,会先写到 os cache,然后到一定时间再从 os cache 到磁盘文件。每隔 1 秒调用一次操作系统的 fsync 操作,强制将 os cache 中的数据,刷入磁盘文件中。
为了保证性能,会先写入 os cache 中,然后定期强制执行 fsync 操作将数据刷入磁盘。
原理:
- 每台单机 redis 的数据量收到内存限制,所以 aof 不会无线增长;
- 当数据超过内存限制的时候,会自动使用 LRU 算法将数据淘汰掉;
- AOF 存放的是每条写入的命令,所以会不断的膨胀,当达到一定的时候,会做 rewrite 操作;
- rewrite 操作:基于当时 redis 的内存中的数据,重新构造一个更小的 aof 文件,然后删除旧的 aof 文件。
总结:aof 被不断的追加,内存中的数据有最大限制,会被自动淘汰,当 aof 中的数据大于内存中数据时,就会执行 rewrite 操作,生成新的 aof 文件。
AOF 机制对每一条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。
小结
通过 RDB 或者 AOF ,都可以将 redis 内存中的数据给持久化到磁盘上去,然后可以将这些数据备份到别的地方,比如阿里云、云服务。
如果 redis 挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务上拷贝回来,放到指定的目录下,然后重新启动 redis,redis 就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务。
如果同时使用 RDB 和 AOF 两种持久化机制,那么在 redis 重启的时候,会使用 AOF 来重新构建数据,因为 AOF 中的数据更加完整。
来源:oschina
链接:https://my.oschina.net/kaisesai/blog/4495556