redis - 用于 Azure 消费函数的 Redis 连接最佳实践
问题描述
Redis 最佳实践建议使用长寿命的 ConnectionMultiplexer。但是我想在一个可能只存在几秒钟(但运行多次)的天蓝色消费函数中使用 Redis。
我想知道我是否有这样的代码:
private static Lazy<ConnectionMultiplexer> lazyRedisConnection = new Lazy<ConnectionMultiplexer>(() =>
{
string cacheConnection = ConfigurationManager.AppSettings["RedisKey"].ToString();
return ConnectionMultiplexer.Connect(cacheConnection);
});
public static ConnectionMultiplexer RedisConnection
{
get
{
return lazyRedisConnection.Value;
}
}
在 Azure 消耗函数上,例如运行 10000 次。由于 Azure 消费函数的工作方式,这实际上会创建 10000 个连接,而不是重用一个?
手动创建/处理每个函数的连接会更安全吗?
解决方案
尽管单个函数的执行可能只需要几秒钟,但函数实例(服务器)被重用于多个请求。在实践中,随着传入请求的不断流,每个实例都存在很长时间(几分钟到几小时)。
应在同一实例上执行的调用之间重用数据库连接。
静态字段初始化一次,然后重复用于多次执行,因此您的代码不会创建 10000 个连接,但可能会创建 1 个或 2 个或 3 个,具体取决于缩放控制器将创建多少个实例。
当实例宕机时,您的 App Domain 将被回收,因此与 Redis 的连接将被终止。
我建议您继续使用您引用的代码。
推荐阅读
- applescript - AppleScript 正在生成 json 而不是字符串
- ruby-on-rails - 如何获取 Active Storage 图片的 url
- ios - 执行时“else”语句未在“didSelectRowAt”函数中运行
- php - 值未使用 php mysql 和 ajax 提交到数据库表
- c# - 在 C# 中存储大字符串(html/xml/js 等)
- java - java.lang.OutOfMemoryError 开发带有 4 张图片的应用程序
- java - 如何在没有 root 的情况下在 Android 上可靠地模拟触摸事件(如 Automate 和 Tasker)?
- javascript - Rails:通过 js / jQuery 脚本更改参数
- multithreading - 同步多个 pthread
- python - 基于 np.array 的移动切片重建 np.array 的有效方法