Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘。当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。
Redis提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF。
RDB持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot),将数据库的快照(snapshot)以二进制的方式保存到磁盘中。
AOF持久化记录服务器执行的所有更改操作命令,AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾。Redis还可以在后台对AOF文件进行重写(rewrite),使得AOF文件的体积不会超出保存数据集状态所需的实际大小。
Redis可以同时使用AOF持久化和RDB持久化。在这种情况下,当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据集通常比RDB文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存在。
了解RDB持久化和AOF持久化之间的异同是非常重要的,以下几个小节将详细地介绍这这两种持久化功能,并对它们的相同和不同之处进行说明。
下面我们说一下Redis的第一个持久化策略,RDB快照。Redis支持将当前内存数据的快照存成一个数据文件的持久化机制,而一个持续写入的数据库如何生成快照呢?Redis巧妙地借助了fork命令的写时复制(copy on write)机制,将当前进程fork出一个子进程,子进程根据内存快照,循环将数据持久化为RDB文件。
在默认情况下, Redis将数据库快照保存在根目录下,名字为dump.rdb的二进制文件中。可通过参数dir配置指定保存目录,dbfilename指定文件名。你可以对Redis进行设置,如“save N M”,表示N秒内数据项中有M个改动时这一条件被满足时,自动保存一次数据集。比如你可以配置当10分钟以内有100次写入就生成快照,也可以配置当1分钟内有1000次写入就生成快照,支持可以多个规则一起生效,当匹配到哪个就哪个规则生效。这些规则的定义就在Redis的配置文件中,你也可以通过Redis的CONFIG SET命令在Redis运行时设置规则,不需要重启Redis。
Copyright 2026 荣飞网 All Rights Reserved 苏ICP备17039739号-1