1. 简介
持久化即将数据保存到可永久保存的存储设备中。我们知道 Redis 为了保证效率而把数据都缓存在内存中,但当我们重启系统或关闭系统后,缓存在内存中的数据都会消失,所以为了让有些数据能保留下,Redis 持久化存储就应运而生。Redis 提供了两种方式进行持久化,一种是RDB 持久化,另一种是 AOF(append only file) 持久化,下面我们逐一介绍。
2. RDB 持久化
RDB 是 Redis 默认的持久化机制,它的工作原理是把当前内存中的数据生成快照 (snapshot) 的方式写入磁盘中的二进制文件中,默认的文件名为 dump.rdb。恢复时将快照文件直接读到内存中。RDB 有两种触发方式,分别是自动触发和手动触发。
2.1 自动触发
自动触发使用 save 相关配置触发,比如 “save m n”,表示在 m 秒内数据库存在 n 次修改时,自动触发BGSAVE (BGSAVE 命令在手动触发时会介绍)。Redis 默认配置如下:
save 900 1 # 在 900 秒内如果至少有 1 个 key 的值变化,则触发
save 300 10 # 在 300 秒内如果至少有 10 个 key 的值变化,则触发
save 60 10000 # 在 60 秒内如果至少有 10000 个 key 的值变化,则触发
当实际操作满足配置的 save 形式时就会进行 RDB 持久化,将当前的数据快照保存。
2.2 手动触发
手动触发进行 RDB 持久化涉及到两个 Redis 服务器命令:
-
SAVE:执行一个同步保存操作,将当前 Redis 实例的所有数据快照以 RDB 文件的形式保存到磁盘中。
-
BGSAVE:用于在后台异步保存当前数据库的数据到磁盘。
SAVE 命令由于是同步操作,因此会阻塞当前 Redis 服务器知道 RDB 持久化过程完成为止,对于内存比较大的实例会造成长时间阻塞,不建议在线上环境使用。BGSAVE 命令会执行 fork 操作创建一