在 google 云函数结束时关闭 redis 连接
Close redis connection on google cloud function end
当云函数实例终止时,如何从云函数关闭与 redis 内存存储的连接? (我相信关闭我需要调用 redis.quit(),但我不知道什么时候,我不能在函数 returns 之后立即关闭它们,因为函数实例可以是 reused)
因为我只是让连接保持打开状态,现在我收到 "ECONNRESET" 个错误。
或者,如果 this 之类的事情不可能:
process.on("exit", function(){//also process is not defined in cloud functions
redisClient.quit();
});
在redis配置中指定超时是最好的选择吗? (你如何在 gcp memorystore 中做到这一点?)
Google Cloud Functions 中没有定义生命周期侦听器。每个 Cloud Function 都需要尽快 运行,并在完成处理后关闭它打开的所有资源。
当您的 Cloud Function 入口函数 returns 时,您的容器有资格终止,恕不另行通知。
您有两个选择:
- 在每次函数调用时打开和关闭连接
- 使用连接池并管理连接错误,这与 Cloud Functions 的预期用途背道而驰。
如果您的函数使容器保持温暖,则具有错误处理的连接池 "might" 会以错误处理和测试所有可能问题的不小成本为代价。 Cloud Functions 应用程序应设计为 "stateless"。尝试在 Cloud Functions 中的调用之间保持状态(连接、数据等)不是一个好策略。
我会使用选项 #1 设计我的系统。 Cloud Functions "lightweight" 表示启动、快速完成任务和关闭。
当云函数实例终止时,如何从云函数关闭与 redis 内存存储的连接? (我相信关闭我需要调用 redis.quit(),但我不知道什么时候,我不能在函数 returns 之后立即关闭它们,因为函数实例可以是 reused)
因为我只是让连接保持打开状态,现在我收到 "ECONNRESET" 个错误。
或者,如果 this 之类的事情不可能:
process.on("exit", function(){//also process is not defined in cloud functions
redisClient.quit();
});
在redis配置中指定超时是最好的选择吗? (你如何在 gcp memorystore 中做到这一点?)
Google Cloud Functions 中没有定义生命周期侦听器。每个 Cloud Function 都需要尽快 运行,并在完成处理后关闭它打开的所有资源。
当您的 Cloud Function 入口函数 returns 时,您的容器有资格终止,恕不另行通知。
您有两个选择:
- 在每次函数调用时打开和关闭连接
- 使用连接池并管理连接错误,这与 Cloud Functions 的预期用途背道而驰。
如果您的函数使容器保持温暖,则具有错误处理的连接池 "might" 会以错误处理和测试所有可能问题的不小成本为代价。 Cloud Functions 应用程序应设计为 "stateless"。尝试在 Cloud Functions 中的调用之间保持状态(连接、数据等)不是一个好策略。
我会使用选项 #1 设计我的系统。 Cloud Functions "lightweight" 表示启动、快速完成任务和关闭。