千家信息网

Redis持久化该怎么理解

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Redis持久化该怎么理解,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们都知道Redis是个内存数据库,所有的数据都存储在内存中。一
千家信息网最后更新 2026年11月02日Redis持久化该怎么理解

Redis持久化该怎么理解,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

我们都知道Redis是个内存数据库,所有的数据都存储在内存中。一旦服务器上Redis进程退出,数据库中的数据就会丢失。

持久化是做什么事呢?持久化简单的理解就是将内存中的数据做个备份。Redis的持久化有两种方法,即RDB持久化和AOF持久化。下面将会分两部分介绍这两种持久化方法,以及实现原理。

一、RDB持久化

Redis数据持久化是将内存中的数据保存到磁盘里,避免数据意外丢失。RDB持久化会生成一个RDB文件,这个RDB文件是一个经过压缩的二进制文件。通过该文件可以还原出Redis数据库中的数据。RDB的持久化可以手动执行,也可以根据服务器配置项定期自动执行。

下面我们一起学习一下RDB文件是怎么创建的。有两个命令可以创建RDB文件,一个是SAVE,另一个是BGSAVE。

执行SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完成为止,在服务器进程被阻塞期间,服务器不能处理任何命令请求。

执行BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器父进程继续处理命令请求。

SAVE命令和BGSAVE命令的底层调用的函数都是同一个函数rdbSave,只不过SAVE命令是直接调用这个函数,而BGSAVE会fork()出子进程来调用这个函数。伪代码如下:

RDB文件的载入工作是在服务器启动时自动执行的,只要Redis服务器在启动时检测到RDB文件存在,就会自动载入RDB文件。值得一提的是,Redis服务器在载入RDB文件的期间,会一直处于阻塞状态,直到载入工作完成为止。

BGSAVE命令在不阻塞服务器进程的情况下执行,所以Redis允许用户通过设置服务器的save选项来让服务器每隔一段时间自动执行一次BGSAVE命令。

上面条件只要满足其中一个,BGSAVE命令就会被执行:

  • 第一条的意思是:服务器在900秒内对数据库执行过至少1次修改,就会执行BGSAVE命令

  • 第二条的意思是:服务器在300秒内对数据库执行过至少10次修改,就会执行BGSAVE命令

  • 第三条的意思是:服务器在60秒内对数据库执行过至少10000次修改,就会执行BGSAVE命令

二、AOF持久化

除了RDB持久化之外,Redis还提供了AOF持久化功能,两者的实现方式有着很大的不同。RDB持久化是通过保存数据库中的键值对来记录数据库状态,而AOF持久化是通过保存Redis服务器所执行的写命令来记录记录数据库状态。

AOF持久化是如何实现的呢?AOF持久化分文三个步骤:命令追加、文件写入、文件同步。

  • 命令追加:当AOF持久化功能打开时,服务器在执行完一个写命令后,会以一定的格式将被执行的写命令追加到服务器中的aof缓冲区中。aof缓冲区是redisServer结构体维护的一个SDS结构的属性。

  • 文件写入:文件写入是指从Redis的aof缓冲区写入到操作系统的内存缓冲区。这个过程是为了提高文件的写入效率,但是带来的风险是服务器出现故障时,内存缓冲区中的数据会丢失掉。

  • 文件同步:这个过程是将内存缓冲区中的数据写入到硬盘中的AOF文件中

Redis中默认执行的是RDB持久化,如何打开AOF持久化呢?我们先来看看AOF的配置项:

①appendonly:这个参数是AOF的开关,配置成yes可以打开AOF持久化机制。打开AOF机制后

②appendfsync:我们知道Redis中有个事件循环,Redis在每个事件循环都会将aof缓冲区中的内容写入到操作系统的内存缓冲区。这个参数就是来配置将内存缓冲区中的数据同步到硬盘上的AOF文件中的更新频率,有always、everysec、no三个配置值。

  • always表示每次执行写入操作,就会立即将内存缓冲区中的内容同步到磁盘中的AOF文件中。这种配置性能比较差,但是可以确保数据不丢失。

  • everysec表示每秒执行一次将操作系统的内存缓冲区中的数据同步到磁盘的AOF文件中,这个操作由一个线程来负责,性能很高。

  • no表示由操作系统来控制何时将内存缓冲区中的数据同步到硬盘的AOF文件中。这种操作在服务器出现异常时会丢失一部分数据。

下面说说AOF文件的还原过程,我们知道AOF文件中存储的是所有曾经执行过的写命令,所以服务器只要读入并重新执行一遍AOF文件里保存的写命令,就可以还原服务器关闭之前的数据库内容。

同时为了解决在Redis运行过程中AOF文件越来越大,Redis还提供了AOF重写功能,关于AOF重写原理在此不具体介绍,有兴趣的我们可以私下讨论。

三、RDB和AOF区别和联系,以及同时工作时的情况

①首先我们总结一下两种方式的区别和联系:

RDB持久化:默认开启;全量备份,一次性保存整个数据库;体积小,数据恢复快;服务器异常时可能会丢失部分数据;SAVE操作会阻塞,BGSAVE不阻塞

AOF持久化:默认关闭;增量备份,一次保存一个修改数据库的命令;体积大,数据恢复慢;备份频率可以自己设置;不会出现阻塞

②当RDB和AOF同时开始时:

  • 如果RDB在执行snapshotting操作,那么redis不会执行AOF rewrite; 如果redis在执行AOF rewrite,那么就不会执行RDB snapshotting

  • 如果RDB在执行snapshotting,此时用户执行BGREWRITEAOF命令,那么等RDB快照生成之后,才会去执行AOF rewrite

  • 同时有RDB snapshot文件和AOF日志文件,那么redis重启的时候,会优先使用AOF进行数据恢复,因为其中的日志更完整

看完上述内容,你们掌握Redis持久化该怎么理解的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 文件 命令 服务器 服务 内存 数据库 缓冲区 缓冲 进程 阻塞 同步 配置 内容 操作系统 函数 同时 备份 方法 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 深圳市人人互联网科技有限公司 互联网科技财经 互联网巨头反垄断金融科技 上海万想互联网科技 科技互联网创业计划书 左右互联网络科技 丰台科技园 互联网公司 海南购全球互联网科技 来此购互联网科技有限公司 赶超互联网科技 微信多开 成都互联网科技公司工作好不好 青海科技产业互联网发展 内蒙古九一互联网科技 合肥互联网科技公司公章图片 21世纪互联网科技成就 互联网风格科技公司名称 互联网对科技影响 北京瑞云互联网科技有限公司 中国主要互联网科技公司 互联网金融科技 广东万易互联网科技有限公司惠州分公司 礼当家互联网科技 互联网科技公司需要的职位 中国科技互联网公司收入 福州新华互联网科技学校 知乎 宁夏众和广鑫互联网科技有限公司 新兴科技互联网创新大赛颁奖典礼 互联网科技实习生岗位 广州富喜互联网络科技
0