You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按时间戳实现Varnish Cache缓存失效及内容清除

按时间戳清除Varnish缓存的实现方法

Varnish原生没有直接内置按时间戳批量清除缓存的命令,但可以通过ban规则快速实现该需求,以下是两种常用操作方式:

方法1:无需修改VCL,直接通过varnishadm执行

  1. 首先计算你要清除的时间节点的Unix时间戳,比如要清除昨日0点之前的所有缓存,可执行命令获取时间戳:
    date -d "yesterday 00:00" +%s
    命令执行后会输出对应时间的10位Unix时间戳,示例输出为1717123200
  2. 执行ban命令完成清除:
    varnishadm ban "now - obj.age < 1717123200"

表达式说明:now是Varnish当前的Unix时间戳,obj.age是缓存对象已存在的秒数,now - obj.age就是缓存对象的生成时间戳,满足小于指定时间戳的所有缓存对象都会被批量清除。

方法2:添加VCL规则,支持通过HTTP请求触发清除

如果需要远程调用清除能力,可以修改VCL配置添加专用的清除逻辑:

  1. 在vcl_recv段添加如下配置:
acl purge_allowed {
    "127.0.0.1";
    # 可添加其他允许操作的IP段
}

sub vcl_recv {
    # 校验PURGE操作权限
    if (req.method == "PURGE") {
        if (!client.ip ~ purge_allowed) {
            return(synth(405, "Operation not allowed"));
        }
        # 按时间戳清除逻辑
        if (req.http.X-Purge-Before-Timestamp) {
            ban("now - obj.age < " + req.http.X-Purge-Before-Timestamp);
            return(synth(200, "Successfully purged all cache before timestamp " + req.http.X-Purge-Before-Timestamp));
        }
        # 原有其他PURGE逻辑可保留在下方
    }
    # 原有其他vcl_recv逻辑保留
}
  1. 重载VCL配置后,即可通过curl发起请求执行清除,示例如下:
    curl -X PURGE -H "X-Purge-Before-Timestamp: 1717123200" http://127.0.0.1

注意事项

  • 操作前可执行varnishadm ban.list查看当前已有的ban规则,避免误操作
  • 批量清除后首次访问已清除的缓存资源会触发回源,建议在业务低峰期执行操作
  • 务必做好PURGE操作的权限控制,不要对公网开放相关操作入口,避免恶意清除缓存影响业务

内容的提问来源于stack exchange,提问作者user2272943

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:02