最近在研究使用 google cloud 的 cdn 服务,本文就来讲解如何清除 cdn 的缓存。

本文介绍了几种清除cdn 缓存的方法。

google cloud console 清除

第一种也是最简单的,就是直接从 google cloud console 后台进行操作,我们打开 console 后台,选择网络服务, 点击负载均衡界面,选择我们要清除的cdn 缓存所使用的负载均衡器,点击缓存页面, 输入想要 cdn 节点清除的路径即可。过了一会,就可以看到操作成功,相应的文件已经失效。 img.png

img_1.png

img_2.png

img_3.png

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 方法即可。

参考