一文讲解Redis中的混合持久化
在 Redis 中,RDB 持久化是通过创建数据的快照来保存数据的,而 AOF 持久化则是通过记录每个写入命令来保存数据的。
两种方式各有优缺点。RDB 持久化的优点是恢复大数据集的速度比较快,但是可能会丢失最后一次快照以后的数据。AOF 持久化的优点是数据的完整性比较高,通常只会丢失一秒的数据,但是对于大数据集,AOF 文件可能会比较大,恢复的速度比较慢。
在 Redis 4.0 版本中,混合持久化模式会在 AOF 重写的时候同时生成一份 RDB 快照,然后将这份快照作为 AOF 文件的一部分,最后再附加新的写入命令。
三分恶面渣逆袭:混合持久化
这样,当需要恢复数据时,Redis 先加载 RDB 文件来恢复到快照时刻的状态,然后应用 RDB 之后记录的 AOF 命令来恢复之后的数据更改,既快又可靠。
如何设置持久化模式?
可以通过编辑 Redis 的配置文件 redis.conf 来进行设置,或者在运行时通过 Redis 命令行动态调整。
RDB 持久化通过在配置文件中设置快照(snapshotting)规则来启用。这些规则定义了在多少秒内如果有多少个键被修改,则自动执行一次持久化操作。
save 900 1 # 如果至少有1个键被修改,900秒后自动保存一次
save 300 10 # 如果至少有10个键被修改,300秒后自动保存一次
save 60 10000 # 如果至少有10000个键被修改,60秒后自动保存一次
AOF 持久化是通过在配置文件中设置 appendonly 参数为 yes 来启用的:
appendonly yes
此外,还可以配置 AOF 文件的写入频率,这是通过 appendfsync 设置的:
appendfsync always # 每次写入数据都同步,保证数据不丢失,但性能较低
appendfsync everysec # 每秒同步一次,折衷方案
appendfsync no # 由操作系统决定何时同步,性能最好,但数据安全性最低
为了优化 AOF 文件的大小,Redis 允许自动或手动重写 AOF 文件。可以在配置文件中设置重写的触发条件:
auto-aof-rewrite-percentage 100 # 增长到原大小的100%时触发重写
auto-aof-rewrite-min-size 64mb # AOF 文件至少达到64MB时才考虑重写
手动执行 AOF 重写的命令是:
redis-cli bgrewriteaof
如果决定同时使用 RDB 和 AOF,可以在配置文件中同时启用两者。
save 900 1
appendonly yes
还可以在运行时动态更改:
redis-cli config set save "900 1 300 10 60 10000"
redis-cli config set appendonly yes
redis-cli config set appendfsync everysec