首页 > 解决方案 > 无法在 Go 中设置 AppEngine 的 Memcache

问题描述

我一直在尝试使用 AppEngine 的 Memcache。请注意,我指的是 AppEngine 中包含的那个;我试图避免 MemoryStore 因为它的成本:在 AppEngine 中有免费的替代品,我更喜欢尝试使用那个替代品。

在此处输入图像描述

问题是,虽然我可以从 Web 添加值,但我无法设法在 Go 中获取一些工作代码。

我首先尝试遵循此代码,但得到了error adding item: not an App Engine context.

我读到因为 Memcache 来自 appengine 包而不是 Google Cloud 包("google.golang.org/appengine/memcache"而不是"cloud.google.com/go/xxx"),所以必须在 main: 中添加这个appengine.Main()

这样,应用程序就会失败:

panic: Metadata fetch failed for 'instance/attributes/gae_project': Get "http://metadata/computeMetadata/v1/instance/attributes/gae_project": dial tcp: lookup metadata: Temporary failure in name resolution

goroutine 23 [running]:
google.golang.org/appengine/internal.mustGetMetadata(0xc1bda4, 0x1f, 0x0, 0x0, 0xc000329800)
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/metadata.go:34 +0x148
google.golang.org/appengine/internal.partitionlessAppID(0xc1410e, 0x15)
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/identity_vm.go:112 +0xa5
google.golang.org/appengine/internal.DefaultTicket.func1()
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/api.go:297 +0x9c
sync.(*Once).doSlow(0x11634b8, 0xc3ab10)
    /usr/local/go/src/sync/once.go:66 +0xec
sync.(*Once).Do(...)
    /usr/local/go/src/sync/once.go:57
google.golang.org/appengine/internal.DefaultTicket(0xc000486780, 0xabdc60)
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/api.go:292 +0x65
google.golang.org/appengine/internal.Call(0xce6320, 0xc000486780, 0xc0d10f, 0xa, 0xc082fb, 0x5, 0xce3460, 0xc000329880, 0xce2660, 0xc00046a880, ...)
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/api.go:499 +0x96a
google.golang.org/appengine/internal.(*context).flushLog(0xc0000bd740, 0xc3c601, 0x0)
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/api.go:644 +0x48c
google.golang.org/appengine/internal.handleHTTP.func1(0xc000096540, 0xc0000bd740)
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/api.go:141 +0x58
created by google.golang.org/appengine/internal.handleHTTP
    /home/xxx/go/pkg/mod/google.golang.org/appengine@v1.6.7/internal/api.go:137 +0x397
exit status 2

有谁知道我可以得到这个工作?任何帮助,将不胜感激。提前致谢!

标签: gogoogle-app-enginegoogle-app-engine-go

解决方案


正如@Cerise Limón 所提到的,Memcache 只能由 Go1.11 使用,因为它现在被视为遗留服务。对于运行时 1.12,您需要使用 Memorystore,并且没有免费的解决方法。

GCPs文档中也提到了这一点:

我们建议使用 Memorystore for Redis 作为您的缓存服务。请注意,Memorystore for Redis 不提供免费层。有关详细信息,请参阅 Memorystore 定价。


推荐阅读