首页 > 解决方案 > 用于 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 个连接,而不是重用一个?

手动创建/处理每个函数的连接会更安全吗?

标签: redisazure-functions

解决方案


尽管单个函数的执行可能只需要几秒钟,但函数实例(服务器)被重用于多个请求。在实践中,随着传入请求的不断流,每个实例都存在很长时间(几分钟到几小时)。

应在同一实例上执行的调用之间重用数据库连接。

静态字段初始化一次,然后重复用于多次执行,因此您的代码不会创建 10000 个连接,但可能会创建 1 个或 2 个或 3 个,具体取决于缩放控制器将创建多少个实例。

当实例宕机时,您的 App Domain 将被回收,因此与 Redis 的连接将被终止。

我建议您继续使用您引用的代码。


推荐阅读