<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Redis on elonnzhang</title><link>https://jiabin.dev/categories/redis/</link><description>Recent content in Redis on elonnzhang</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 26 Aug 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://jiabin.dev/categories/redis/index.xml" rel="self" type="application/rss+xml"/><item><title>Redis 持久化 - AOF & RDB</title><link>https://jiabin.dev/blog/page-url/</link><pubDate>Wed, 26 Aug 2026 00:00:00 +0800</pubDate><guid>https://jiabin.dev/blog/page-url/</guid><description>&lt;p&gt;Redis 基于内存运行，因此如果 Redis 服务器崩溃，数据将会丢失。为了防止数据丢失，Redis 提供了两种持久化机制：RDB 和 AOF。&lt;/p&gt;&#10;&lt;h2 id="先给结论"&gt;先给结论&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;RDB 是定期快照&lt;/strong&gt;：文件小、加载快、适合备份和快速恢复，但两次快照之间的写入可能全部丢失。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AOF 是写命令日志&lt;/strong&gt;：通常能把故障时的丢失窗口压到约 1 秒，但文件会增长，需要 rewrite；磁盘写入、&lt;code&gt;fsync&lt;/code&gt; 和恢复回放都要付出成本。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;线上有状态数据通常同时开 RDB 和 AOF&lt;/strong&gt;：AOF 用于较小的 RPO，RDB 用于备份、迁移和快速装载。两者同时打开时，Redis 启动优先加载 AOF。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Redis 7 是文件布局分水岭&lt;/strong&gt;：AOF 从单文件变为 Multi-Part AOF（MP-AOF），由 base 文件、incremental 文件和 manifest 共同组成。备份时不能只拷贝一个 &lt;code&gt;appendonly.aof&lt;/code&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;持久化不是高可用&lt;/strong&gt;：副本、Sentinel、Cluster 能缩短故障切换时间，但不能替代跨故障域的持久化备份。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;可以把目标拆成两个指标：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;RPO（Recovery Point Objective）&lt;/strong&gt;：最多能接受丢多少数据。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;RTO（Recovery Time Objective）&lt;/strong&gt;：希望多快恢复服务。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;RDB 通常更偏向较短的 RTO，AOF 通常更偏向较小的 RPO。最终结果还受文件系统、磁盘控制器、云盘写入保障和备份流程影响，不能只看 Redis 配置名义上的策略。&lt;/p&gt;&#10;&lt;h2 id="1-redis-为什么需要持久化"&gt;1. Redis 为什么需要持久化&lt;/h2&gt;&#10;&lt;p&gt;Redis 的工作集在内存中。进程重启、主机掉电或容器被销毁时，内存状态本身不会保留。持久化把内存状态转换为可在启动时重新装载的文件：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;客户端命令&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; v&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;内存中的数据集 ---------------&amp;gt; RDB 快照（某一时刻的完整状态）&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +--------------------------&amp;gt; AOF（按顺序记录的写命令）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里有三个容易混淆的边界：&lt;/p&gt;</description></item></channel></rss>