Redis
提供两种持久化机制:RDB
和AOF
。RDB
将数据库快照以二进制的方式保存到磁盘;AOF
将所有写入命令及相关参数以协议文本的方式写入文件并持久保存磁盘。
例如:Redis Server收到 set key value
命令,首先将命令转化为协议文本,然后将协议文本追加到AOF缓存,根据sync策略调用 fsync/fdatasync
。
如果想要恢复数据库,只需要将AOF里命令读出来并重放即可。
AOF机制
存在一个致命的问题,随着时间推移,AOF文件会膨胀,当Redis Server重启时严重影响数据库启动时间。为解决此问题,系统需要定期重写AOF文件,目前采用的方式是创建一个新的AOF文件,将数据库里的全部数据转换成协议的方式保存到文件中,重写后的大小一定是小于等于旧AOF文件的大小。
目前Redis中存在两种重写AOF方案:REWRITE
方案在主线程中重写AOF,会阻塞工作线程,在生产环境中很少使用;生产环境中主要是用 BGREWRITE
方案,它在后台子进程中重写AOF, 不会阻塞工作线程,能正常对外提供服务。
Reference: