-
Notifications
You must be signed in to change notification settings - Fork 29
How Subscription Cache Works

当机场暂时“打烊”,让缓存为你撑起一片不断网的天空
在 Clash、V2Ray 等代理工具的世界里,订阅缓存就像一个藏在后台的保险箱。每次你的客户端成功从机场拉取到节点列表和规则,它都会悄悄保存一份副本在本地。当你的网络出现波动、机场服务器繁忙,甚至某个订阅链接意外失效时,这份缓存就是维持代理的最后一道防线。理解订阅缓存的工作方式,不仅能帮你诊断“为什么节点没更新”,还能让你在关键时刻保持在线。
如果你对订阅链接的基本概念还不太清楚,可以先阅读 什么是“机场”? 和 Clash 使用教程 打好基础。当你看懂了机场和订阅的关系,订阅缓存就是你手边那个随时待命的备胎节点库。
最简单的解释:
订阅缓存 = 客户端在本地保存的、上一次成功下载的订阅内容副本
当你把机场提供的订阅链接粘贴进 Clash for Android、 Clash for Windows 或 Clash Verge Rev 等客户端时,点击下载的瞬间,客户端会向机场服务器发起一次 HTTP 请求。服务器返回的 YAML 或 Base64 文本被解析成节点和规则,然后同时做了两件事:一是加载到内存中让代理开始工作,二是写入一个本地文件作为缓存。
整个过程就像你网购了一份电子杂志:
在线下载最新一期
↓
杂志 App 打开阅读
↓
同时自动存入本地书架(缓存)
↓
下次没网时,依然能翻开上一期
订阅缓存不是可有可无的附加品,它是客户端稳定性的关键设计,原因有几点:
机场服务器并非永远在线。它可能因为 DDoS 攻击、机房维护、域名被墙而暂时不可达。如果你的客户端没有缓存,一旦在这些时刻重启或手动更新订阅,就会拉取失败,所有节点瞬间消失,代理断连。而有了缓存,客户端会检测到下载失败后自动切回上一次成功的配置,保证你依然可以继续上网。
大多数机场对订阅链接设置了请求频率限制(例如每分钟不超过 3 次)。如果客户端没有缓存,每次你打开应用或者切换网络它都要重新下载,很容易触发机场的 Rate Limit,导致 IP 被临时拉黑。缓存让客户端只在到达设定的更新间隔时才真正发起网络请求,其余时间都从本地读取。
打开客户端后立刻显示节点列表,而不是先转圈等下载——这就是缓存的功劳。在 Clash Mi 或 ClashN 等追求极速启动的客户端中,缓存机制让它们几乎能做到“秒开即连”。
有时机场更新订阅后,你可能发现新的节点不如旧的稳定,或者新的规则导致某些网站打不开。如果客户端保留了多次缓存(部分客户端支持),你就可以像“系统还原”一样回滚到上一个版本的订阅,等待机场修复问题。
不同的客户端实现细节略有差异,但核心流程大致如下:
- 客户端触发订阅更新(手动点击或定时器到期)。
- 向订阅链接发送 HTTP GET 请求,携带 User-Agent 等标识。
- 接收服务器返回的内容,校验格式(YAML/Base64)。
- 解析出
proxies、proxy-groups、rules等字段。
- 将服务器返回的原始文本(未经修改)写入本地缓存文件,通常存储在客户端的配置目录下,文件名包含订阅的哈希值或自定义名称。
- 同时记录本次更新的时间戳和 ETag(如果服务器支持)。
- 将解析出的节点数据加载到当前运行的配置中。
- 当客户端启动、或网络请求失败、或尚未到达更新间隔时,直接从缓存文件读取上次保存的原始内容。
- 重新解析并加载节点,使代理可以立即工作。
客户端在决定“是否要真正联网更新”时,通常会检查以下条件:
- 时间间隔:距离上次成功更新是否已超过设定值(如 360 分钟)。
- 强制更新标志:用户是否手动点击了“立即更新”。
- 网络状态:当前是否处于 Wi-Fi 或移动数据(移动端常见)。

▲ 订阅缓存的决策流程:能用旧的绝不折腾新的,直到用户或定时器说“该换了”
在 Clash 生态中,各客户端对缓存的支持程度略有不同:
| 客户端 | 缓存策略 | 特点 |
|---|---|---|
| Clash for Windows | 下载后缓存在 profile 目录,更新失败时自动回退 | 稳定,支持多份配置切换 |
| Clash Verge Rev | 本地缓存 + 定期后台更新 | 默认更新间隔 1440 分钟,可自定义 |
| Clash for Android | 内置缓存,断网或下载失败时使用 | 移动端必备,省流量且防断连 |
| ClashX / ClashX Pro | 托管配置自动缓存,右键菜单强制刷新 | macOS 上安静运行,几乎无感 |
| v2rayN | 订阅更新后保存到本地,支持离线使用 | 可手动备份缓存文件 |
订阅缓存虽然实用,但也不是没有“副作用”。了解下面这些场景,能让你在遇到问题时更快找到原因。
机场更换了服务器 IP,但你的缓存还保留着旧节点。连接时会一直超时。解决方法是手动清理缓存并强制更新。在 Clash Verge Rev 中,可以点击订阅旁的“更新”按钮;在 Clash for Android 中,进入配置页面下拉刷新。
机场可能会调整规则,例如把某个被墙域名从直连改为代理。如果你的缓存规则还是旧的,就可能打不开那个网站。定期更新订阅(建议 6-12 小时一次)能缓解这个问题。
极少数情况下,突然断电或磁盘错误可能导致缓存文件不完整。客户端启动时会校验格式,如果发现损坏会自动删除缓存并尝试重新下载。如果下载也失败,可能会提示“订阅无效”。这时你可以手动找到缓存目录(通常在 data/profiles 或类似路径)删除对应文件,然后重新添加订阅。
缓存文件通常以 YAML 或 JSON 明文存储,包含服务器地址、端口、加密方式甚至密码。如果你与他人共享电脑,建议将客户端的数据目录放在加密卷中,或者在使用完毕后退出客户端并清除缓存。
大部分客户端都提供了手动干预缓存的手段。以最通用的方式为例:
- 强制更新:忽略缓存,直接请求最新订阅。适用于怀疑节点过时或机场已更换服务器的情况。
- 清除缓存并更新:先删除本地缓存文件,再发起下载。适用于缓存损坏或格式异常。
- 导出缓存:将当前缓存保存为独立配置文件。适用于备份或跨设备迁移。
- 设置缓存更新间隔:调整时间参数,平衡实时性和请求频率。
在这些操作中,你可能需要访问客户端的安装目录或数据目录。如果你想下载最新版的客户端来体验更完善的缓存机制,可以通过下面的官方发布页获取:
📦 Clashforwinodws 官方 Releases 页面
▲ 这里汇集了本 Wiki 所涉客户端的最新版本。选择一个适合你系统的安装包,更新到新版通常能带来更稳定的缓存行为和更少的意外断连。
随着 Sing-Box 等新一代核心的崛起,订阅缓存也在进化。未来的趋势包括:
- 差量更新:只下载自上次更新以来变化的节点,节省流量和时间。
- 加密缓存:将本地缓存以加密形式存储,保护节点隐私。
- 多云同步:利用 iCloud、Google Drive 等云端同步缓存,让同一份订阅在所有设备上保持一致。
在 Clash 发展史 的视角下,订阅缓存从一个简单的本地备份机制,逐渐发展成了保障代理连续性的核心基础设施。理解它、善用它,你就能在代理世界中始终保持主动权。
订阅缓存是代理客户端在离线、机场故障和频繁请求之间找到的优雅平衡点。它像一位沉默的管家,把最新一次成功的配置妥帖收好,只在必要时刻才去敲机场的门。学会利用缓存,你就能减少 90% 的“节点消失”和“突然断网”带来的焦虑。
三个需要记住的操作要点:
定期更新(但别太频繁) → 节点异常时手动强制刷新 → 偶尔备份一份缓存配置
配合本 Wiki 中任意一款客户端的详细指南,你都能找到对应的缓存设置入口。代理之路,从理解缓存开始,会走得更稳更远。
—— 想深入了解某一客户端的缓存细节?请翻阅 Clash Verge Rev 使用指南 或 Clash for Windows 使用指南。
本文档由
Clashforwinodws/Clash-for-Winodows
社区维护
页面地址:
https://clashforwinodws.github.io/Clash-for-Winodows/