go - 无法在 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
有谁知道我可以得到这个工作?任何帮助,将不胜感激。提前致谢!
解决方案
正如@Cerise Limón 所提到的,Memcache 只能由 Go1.11 使用,因为它现在被视为遗留服务。对于运行时 1.12,您需要使用 Memorystore,并且没有免费的解决方法。
GCPs文档中也提到了这一点:
我们建议使用 Memorystore for Redis 作为您的缓存服务。请注意,Memorystore for Redis 不提供免费层。有关详细信息,请参阅 Memorystore 定价。
推荐阅读
- html - CSS Grid - 在自动流列上自动生成新的行中断
- python - 有没有办法让我加载图像并将其放在 Tkinter 窗口的背景上?
- javascript - Node.js Puppeteer - 导航超时错误
- javascript - 这个nodejs函数的Pythonic方式
- javascript - Angular - 可排序的嵌套拖放
- tf.data.dataset - 从任何外部库中增加 tf.data.Dataset 元素(在我的情况下为albumentations)
- mongodb - 如何在 spring-data-mongodb 中运行 mongodb 本机(不是 json)查询?
- c# - 引导程序在 MVC 项目中无法正常工作
- express - 下载文件并在 Postman 中发送消息作为响应
- xcode - iOS14 和 UUID 会消失吗?