最近在研究使用 google cloud 的 cdn 服务,本文就来讲解如何清除 cdn 的缓存。
本文介绍了几种清除cdn 缓存的方法。
google cloud console 清除
第一种也是最简单的,就是直接从 google cloud console 后台进行操作,我们打开 console 后台,选择网络服务, 点击负载均衡界面,选择我们要清除的cdn 缓存所使用的负载均衡器,点击缓存页面, 输入想要 cdn 节点清除的路径即可。过了一会,就可以看到操作成功,相应的文件已经失效。
Google Cloud CLI 命令
第二种方法是使用 Google Cloud CLI 使 cdn 缓存文件失效。
Google Cloud CLI 安装
该怎么安装 Google Cloud CLI 呢,有2个办法: 1) 直接下载安装二进制文件 2) 使用 Cloud Shell. 本文是使用 Cloud Shell 进行的操作。
使缓存内容失效
1 使用 gcloud compute url-maps list
列出目前所使用的负载均衡器
2 使用 gcloud compute url-maps invalidate-cdn-cache LOAD_BALANCER_NAME --path "/images/file.jpg"
命令使相应缓存内容失效
3 如果你相应针对某个 host 进行特殊的缓存清除操作,你可以使用 –host 标志。默认情况下,Google Cloud CLI 会等到失效操作完成。要在后台执行失效操作,请在命令行中附加 –async。
过了一会可以看到,相应的路径的缓存也成功失效了。
Google Cloud Client
第三种方法是使用 Google Cloud Client 进行缓存的失效操作。通过查阅资料,发现 google 有2个 go client 可以进行相应的操作: 1) https://github.com/googleapis/google-api-go-client 2) https://github.com/googleapis/google-cloud-go. 由于我们使用的是 google cloud 的服务,所以我们使用第二个进行代码的编写。
package main
import (
compute "cloud.google.com/go/compute/apiv1"
"cloud.google.com/go/compute/apiv1/computepb"
"context"
"google.golang.org/api/option"
"log"
)
func main() {
ctx := context.Background()
client, err := compute.NewUrlMapsRESTClient(ctx, option.WithCredentialsFile("./credentials.json"))
if err != nil {
return
}
defer client.Close()
url := "/index.html"
op, err := client.InvalidateCache(ctx, &computepb.InvalidateCacheUrlMapRequest{
// The body resource for this request
CacheInvalidationRuleResource: &computepb.CacheInvalidationRule{
Path: &url,
},
// google console 项目id
Project: "xx",
// lb name
UrlMap: "xx",
})
if err != nil {
log.Fatal(err)
return
}
err = op.Wait(ctx)
if err != nil {
log.Fatal(err)
return
}
}
默认是采用同步的,即得等缓存清除成功后才会结束,如果需要异步执行只需将 wait 方法替换为 Poll 方法即可。