缓存来自云的内存存储 运行 创建错误无法创建新的会话密钥。很可能是缓存不可用

Caching on memory store from cloud run create error Unable to create a new session key. It is likely that the cache is unavailable

我在云端部署了一个应用程序 运行。它 运行 位于 HTTPS 负载平衡器之后。 我希望它能够使用内存存储服务缓存一些数据。我基本上按照文档使用无服务器 vpc 连接器,但此异常不断弹出:

Unable to create a new session key. It is likely that the cache is unavailable.

我猜我的云 运行 服务无法访问 memorystore。

在 Django 上我有:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": f"redis://{CHANNEL_REDIS_HOST}:{CHANNEL_REDIS_PORT}/16",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "IGNORE_EXCEPTIONS": True,
        },
        "KEY_PREFIX": "api"
    }
}

其中 CHANNEL_REDIS_HOST 是来自我的 memorystore 主要端点的 IP,CHANNEL_REDIS_PORT 是端口。

当我运行这个命令时:

gcloud redis instances describe instance_name --region region --format "value(authorizedNetwork)"

它returnsprojects/my_project/global/networks/default.

然后,在 VPC 网络上,我点击了 'default',然后点击了 'ADD SUBNET'。我创建了 IP 地址范围为 10.0.0.0/28 的子网。也许问题出在这一步,因为我对所有 IP 通信的了解不多..

当我运行这个命令时:

gcloud compute networks subnets describe my subnet

目的是 PRIVATE,网络是 https://www.googleapis.com/compute/v1/projects/my_project/global/networks/default

所以我认为我的 memorystore 实例和我的子网能够连接。

然后,我创建了一个无服务器 VPC 连接器,使用相同的区域、默认网络和我刚刚创建的子网。

最后,在我的服务中,我将 VPC 连接器设置为我刚刚创建的连接器,并使用仅通过 VPC 连接器将请求路由到私有 IP 选项重新部署,如果我选择通过 VPC 连接器路由所有流量,我的部署将失败,我想可能是因为我在负载均衡器后面,无论如何我不想将所有流量路由到我的连接器。

这样做之后,我仍然收到消息开头提到的错误。 有什么想法吗?

谢谢

所以我认为我的问题是使用 db 16。由于 memorystore 上的最大数据库数是 16,因此它必须是从 0 到 15。更改它使其有效。