redis 的持久化机制

我的梦境 提交于 2020-08-14 20:10:19

redis 持久化机制有两种:RDB 和 AOF。

RDB

RDB 机制是对 redis 中的数据执行周期性的持久化。每个几分钟、几小时、几天生成 redis 内存中的数据的一份完整的快照。

img

AOF

每条写入命令作为日志,写入 aof 文件中。现代操作系统中,写入文件不是直接写磁盘,会先写到 os cache,然后到一定时间再从 os cache 到磁盘文件。每隔 1 秒调用一次操作系统的 fsync 操作,强制将 os cache 中的数据,刷入磁盘文件中。

img

为了保证性能,会先写入 os cache 中,然后定期强制执行 fsync 操作将数据刷入磁盘。

原理:

  • 每台单机 redis 的数据量收到内存限制,所以 aof 不会无线增长;
  • 当数据超过内存限制的时候,会自动使用 LRU 算法将数据淘汰掉;
  • AOF 存放的是每条写入的命令,所以会不断的膨胀,当达到一定的时候,会做 rewrite 操作;
  • rewrite 操作:基于当时 redis 的内存中的数据,重新构造一个更小的 aof 文件,然后删除旧的 aof 文件。

img

总结:aof 被不断的追加,内存中的数据有最大限制,会被自动淘汰,当 aof 中的数据大于内存中数据时,就会执行 rewrite 操作,生成新的 aof 文件。

AOF 机制对每一条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。

小结

通过 RDB 或者 AOF ,都可以将 redis 内存中的数据给持久化到磁盘上去,然后可以将这些数据备份到别的地方,比如阿里云、云服务。

如果 redis 挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务上拷贝回来,放到指定的目录下,然后重新启动 redis,redis 就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务。

如果同时使用 RDB 和 AOF 两种持久化机制,那么在 redis 重启的时候,会使用 AOF 来重新构建数据,因为 AOF 中的数据更加完整。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!