最近在研究使用 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 方法即可。