ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Redis持久化机制

Redis持久化机制 Redis 是一款内存型数据库绝大多数数据都存储在内存中读写速度极快。但内存数据是易失性的一旦机器断电、进程崩溃、重启内存数据会全部丢失。为了解决数据丢失问题Redis 提供了持久化机制把内存数据定期落地到磁盘保证重启后可以恢复数据。那么Redis 中一共有三种持久化方案RDB 快照持久化存某一刻的全量数据AOF 日志持久化存每一条写命令混合持久化RDBAOF兼顾速度与安全生产最优一、RDB 持久化快照1.1 原理RDBRedis Database是全量快照。Redis 在指定时间点把当前内存中所有数据序列化为二进制文件保存为dump.rdb。简单理解RDB 保存的是“某一瞬间的完整数据镜像”。1.2 触发方式有两种触发方式分别是手动触发和自动触发手动触发SAVE主进程自己做快照全程阻塞线上禁用BGSAVEfork 子进程做快照主进程不阻塞线上默认使用自动触发配置文件save 900 1 save 300 10 save 60 10000含义满足任意一条就自动执行 BGSAVE900 秒内至少 1 个 key 改动300 秒内至少 10 个 key 改动60 秒内至少 10000 个 key 改动1.3 RDB 优缺点优点二进制压缩文件体积小适合备份、迁移重启恢复数据速度最快BGSAVE 子进程执行不阻塞主业务缺点会丢数据两次快照之间的增量数据宕机丢失大数据量 fork 会有短暂阻塞二进制文件无法人工修改、修复二、AOF 持久化日志2.1 原理AOFAppend Only File以日志形式记录每一条写命令不断追加到 aof 文件末尾。重启 Redis 时重新执行一遍日志里的命令恢复内存数据。AOF 默认关闭需要手动开启appendonly yes2.2 三种刷盘策略 appendfsync# 每写一条就刷盘最安全、最慢 appendfsync always # 每秒刷一次盘默认最多丢 1 秒数据 appendfsync everysec # 交给系统刷盘性能最高、最不安全 appendfsync no2.3 AOF 重写机制bgrewriteaof随着不断写入AOF 文件会越来越大存在大量冗余命令多次修改同一个 key。AOF 重写不读旧日志直接根据当前内存数据生成最简命令写入新 AOF替换旧文件实现文件瘦身。自动重写配置auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb2.4 AOF 优缺点优点数据更安全默认最多丢失 1 秒数据文本格式可手动修复损坏日志缺点文件体积比 RDB 大很多重启恢复速度比 RDB 慢持续刷盘有一定 IO 压力三、混合持久化RDB AOFRedis4.0现在主要采用两者结合的模式3.1 作用结合 RDB恢复快、体积小和 AOF数据安全的优点解决纯 AOF 重启慢、纯 RDB 丢数据的问题。开启方式aof-use-rdb-preamble yes3.2 机制流程AOF 重写时先把当前全量数据以 RDB 二进制格式写入文件头部后续新的写命令继续以 AOF 日志追加在后面最终文件结构RDB 全量快照 AOF 增量日志3.3 重启恢复先快速加载头部 RDB 全量数据再回放后面少量 AOF 增量命令又快又安全。四、Redis 数据恢复优先级开启 AOF/混合持久化优先加载 AOF 文件未开启 AOF加载 RDB 文件AOF 损坏可修复redis-check-aof --fix xxx.aof五、生产环境最佳实践不单独使用 RDB丢数据风险高生产推荐开启AOF 混合持久化RDB 可作为定时冷备份用于异地容灾持久化文件与业务磁盘分离防止磁盘故障数据丢失大内存机器控制重写频率避免频繁 fork 导致卡顿总结RDB快照、体积小、恢复快、会丢数据 → 适合备份AOF日志、安全性高、文件大、恢复慢 → 适合保数据混合持久化集两者优点生产环境标准方案
返回列表