Redis 提供了两种主要的数据持久化方式:RDB(Redis DataBase)和 AOF(Append Only File)。下面分别介绍这两种方式的使用:
RDB 是 Redis 默认的持久化方式。它会在指定的时间间隔内生成数据集的时间点快照(snapshot)。
在 redis.conf
文件中,可以通过以下配置来设置 RDB 持久化:
# 设置在 900 秒(15 分钟)之后,如果至少有 1 个 key 发生了变化,则自动触发 RDB 快照
save 900 1
# 设置在 300 秒(5 分钟)之后,如果至少有 10 个 key 发生了变化,则自动触发 RDB 快照
save 300 10
# 设置在 60 秒(1 分钟)之后,如果至少有 10000 个 key 发生了变化,则自动触发 RDB 快照
save 60 10000
# 禁用 RDB 持久化
save ""
除了配置自动触发 RDB 快照外,还可以通过 SAVE
或 BGSAVE
命令手动触发 RDB 快照:
SAVE
:阻塞 Redis 服务器,直到 RDB 进程完成,期间无法处理客户端请求。BGSAVE
:在后台异步执行 RDB 快照,不会阻塞 Redis 服务器。SAVE
BGSAVE
AOF 持久化记录服务器接收到的所有写操作命令,并在服务器启动时,通过重新执行这些命令来重建数据集。
在 redis.conf
文件中,可以通过以下配置来启用 AOF 持久化:
# 启用 AOF 持久化
appendonly yes
# 设置 AOF 文件名
appendfilename "appendonly.aof"
# 设置 AOF 文件同步策略
appendfsync everysec # 每秒同步一次,性能和持久化之间取得平衡
appendfsync always # 每次写操作都同步,最安全但性能较差
appendfsync no # 不主动同步,由操作系统决定何时同步,性能最好但安全性最低
AOF 文件会随着时间的推移变得越来越大,为了控制文件大小,可以定期进行 AOF 重写。Redis 会根据当前数据集生成一个新的 AOF 文件,替换旧的 AOF 文件。
可以通过 BGREWRITEAOF
命令手动触发 AOF 重写:
BGREWRITEAOF
为了兼顾性能和数据安全性,可以同时启用 RDB 和 AOF 持久化。在这种情况下,Redis 会优先使用 AOF 文件来恢复数据,因为 AOF 文件通常比 RDB 文件更完整。
在 redis.conf
文件中,可以设置:
# 启用 AOF 持久化
appendonly yes
# 禁用 RDB 持久化
save ""
auto-aof-rewrite-percentage
和 auto-aof-rewrite-min-size
来控制 AOF 文件的重写。通过合理配置和使用 RDB 和 AOF,可以有效地保证 Redis 数据的持久化和安全性。