菜鸟科技网

Redis保存到硬盘命令有哪些?

Redis 作为一款高性能的内存数据库,其数据默认存储在内存中,但为了确保数据持久化(即服务器重启后数据不丢失),Redis 提供了将数据保存到硬盘的机制,主要通过两种命令实现:SAVEBGSAVE,此外还有配置文件中的自动持久化策略(RDB 和 AOF),以下将详细介绍这些命令的使用场景、原理及注意事项。

Redis保存到硬盘命令有哪些?-图1
(图片来源网络,侵删)

手动持久化命令

SAVE 命令

SAVE 命令会同步执行,即主进程会阻塞所有客户端请求,直到数据保存完成,这种方式会确保数据立即写入硬盘,但会严重影响 Redis 的性能,尤其是在数据量较大的情况下。SAVE 命令通常只在数据量小且对实时性要求极高的场景下使用,或在服务器停止维护前手动触发。
语法SAVE
示例:在 Redis 客户端输入 SAVE,Redis 会开始将内存中的快照写入 dump.rdb 文件(默认文件名),完成后返回 OK

BGSAVE 命令

BGSAVE(Background Save)是异步执行的持久化命令,Redis 会通过子进程完成数据保存,主进程继续处理客户端请求,避免了阻塞,这是生产环境中推荐的手动持久化方式。
语法BGSAVE
示例:输入 BGSAVE 后,Redis 会返回 Background saving started,子进程会在后台将数据快照写入硬盘,保存完成后,Redis 会在日志中记录相关信息。
注意:如果已有子进程在执行持久化任务(如前一次 BGSAVE 未完成或 AOF 重写正在进行),BGSAVE 会直接返回错误。

自动持久化配置

除了手动命令,Redis 还支持自动持久化,通过配置文件 redis.conf 中的参数实现,主要包括 RDB 和 AOF 两种方式。

RDB(Redis Database)快照

RDB 是通过定时将内存数据快照保存到硬盘的方式,配置参数如下:

Redis保存到硬盘命令有哪些?-图2
(图片来源网络,侵删)
  • save <seconds> <changes>:在指定秒数内,如果数据修改次数达到阈值,则自动触发 BGSAVEsave 900 1 表示 900 秒内有 1 次修改就保存。
  • stop-writes-on-bgsave-errorBGSAVE 失败,是否停止写入操作(默认为 yes)。
  • rdbcompression:是否压缩 RDB 文件(默认为 yes)。
  • rdbchecksum:是否进行 RDB 文件校验(默认为 yes)。

优点:文件体积小,恢复速度快;
缺点:可能会丢失最后一次快照后的数据。

AOF(Append Only File)日志

AOF 通过记录所有写操作命令到日志文件来实现持久化,配置参数包括:

  • appendonly:是否启用 AOF(默认为 no)。
  • appendfsync:同步策略,可选 always(每次写入同步)、everysec(每秒同步,默认)、no(由操作系统控制)。
  • auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage:AOF 文件重写触发条件(例如文件大小超过 64MB 且增长 100% 时重写)。

优点:数据安全性高,几乎不丢失数据;
缺点:文件体积大,恢复速度较慢。

持久化对比与选择

特性 RDB(快照) AOF(日志)
持久化方式 定时全量快照 追加写操作命令
数据安全性 可能丢失最后一次快照数据 默认每秒同步,数据丢失少
文件体积 小,压缩后更节省空间 大,记录所有写操作
恢复速度
性能影响 BGSAVE 无阻塞,SAVE 阻塞 fsync 策略影响性能

选择建议

Redis保存到硬盘命令有哪些?-图3
(图片来源网络,侵删)
  • 对数据安全性要求高且能接受一定性能损耗,选 AOF;
  • 对性能要求高且可容忍少量数据丢失,选 RDB;
  • 生产环境常结合两者使用(RDB 备份 + AOF 实时持久化)。

相关问答 FAQs

Q1:Redis 持久化文件存储在什么位置?如何修改路径?
A1:Redis 的 RDB 文件默认存储在 Redis 安装目录下的 dump.rdb,AOF 文件为 appendonly.aof,可通过修改配置文件 redis.conf 中的 dir 参数(指定文件目录)和 dbfilename(RDB 文件名)或 appendfilename(AOF 文件名)调整路径,修改后需重启 Redis 生效。

Q2:Redis 突然宕机,使用 RDB 和 AOF 哪种方式恢复的数据更完整?
A2:AOF 恢复的数据更完整,因为 RDB 是定时快照,宕机时可能丢失最后一次快照后的所有数据;而 AOF 默认每秒同步一次,最多丢失 1 秒内的数据,且通过 appendfsync always 可实现零丢失(但性能较低),恢复时,Redis 会优先加载 AOF 文件,若 AOF 未启用再加载 RDB 文件。

分享:
扫描分享到社交APP
上一篇
下一篇