Skip to main content

Module edge_purge

Module edge_purge 

Source
Expand description

内容变更与启动后清除 EdgeOne 节点上缓存的公开页 HTML。 内容变更后清除 EdgeOne 节点上缓存的公开页 HTML。

白名单匿名页带 s-maxage(SsrCacheSettings::edge_ttl_secs)时,CDN 节点会缓存 HTML; 源站 HTML 缓存每次失效(文章、标签、设置写入,跨实例通知,发版启动)都经 request_purge 发信号,本任务:

  1. 防抖 DEBOUNCE:一次写入会连续触发多次失效,批量操作更多,合并成一次;
  2. 立刻清一次,SECOND_PASS_DELAY 后再清一次:写入前已开始渲染的请求可能在第一次清除 之后才返回旧页面,EdgeOne 会把它按 s-maxage 缓存下来(源站缓存有世代号挡住,边缘没有);
  3. 失败按 RETRY_DELAYS 重试,最终失败记 error,陈旧上限退回到 s-maxage。

清除范围是 ssr_cache 的白名单:前缀按目录清除,固定页面按 URL 清除。不用 Hostname 或 全站清除,否则会连带 /pkg/ 与静态资源,节点重新回源时可能缓存 EdgeOne 自己压缩的 更大的 br(见 docs/首屏性能实测-2026-10-28.md)。

启动时路由装配会使源站缓存失效,所以每次发版或重启都会清一次:边缘不会留下引用已删除 /pkg/ 分包的旧 HTML(YGG_PREVIOUS_PUBLIC_DIR 只保留上一版)。

凭据只读环境变量(EDGEONE_ZONE_ID、TENCENTCLOUD_SECRET_ID、TENCENTCLOUD_SECRET_KEY), 缺任一项时任务不启动,信号只是空操作。建议用只授权该站点 teo:CreatePurgeTask 的 CAM 子账号。

Structs§

Credentials 🔒
PurgeTargets 🔒
一轮清除的目标:目录(purge_prefix)与固定页面(purge_url)。

Constants§

API_ACTION 🔒
API_HOST 🔒
API_SERVICE 🔒
API_VERSION 🔒
CONTENT_TYPE 🔒
与腾讯云 SDK 一致:签名头只有 content-type;host,内容类型不带 charset。
DEBOUNCE 🔒
RETRY_DELAYS 🔒
SECOND_PASS_DELAY 🔒
实测 EdgeOne 完成一次目录或 URL 清除要 9–20 秒(2026-11-10)。第二轮要落在第一轮完成之后, 才能清掉第一轮进行期间节点从源站拉回的旧页面。

Statics§

SIGNAL 🔒

Functions§

authorization 🔒
TC3-HMAC-SHA256 签名,构造方式与腾讯云 Python SDK(_get_tc3_signature)一致。
create_purge_task 🔒
hmac_sha256 🔒
HMAC-SHA256(RFC 2104)。只此一处用到,不为它引入 hmac crate。
is_configured
是否配置了清边缘缓存的凭据(启动日志用)。
parse_response 🔒
解析云 API 响应:Response.Error 或非空 FailedList 视为失败,成功返回 JobId。
purge_with_retry 🔒
request_purge
请求清除边缘 HTML 缓存。只发信号,立即返回;未配置凭据时没有任务在等,信号被忽略。
run
常驻任务:等待信号,防抖后清两次。