与 Azure 消费函数结合使用的 Redis 连接最佳实践

标签 redis azure-functions

Redis 最佳实践建议使用长期存在的 ConnectionMultiplexer。不过,我想在 azure 消费函数中使用 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 个连接,具体取决于比例 Controller 将创建多少个实例。

当实例出现故障时,您的应用程序域将被回收,因此与 Redis 的连接将被终止。

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

关于与 Azure 消费函数结合使用的 Redis 连接最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093109/

相关文章:

azure - 在 azure 功能中,是否可以使用应用程序设置作为绑定(bind)路径的一部分?

java - 使用java中的azure函数将文件从浏览器上传到azure blob存储

python - 如何使用 python 在 redis 中实现原子获取或设置和获取 key ?

azure - 如何在 Azure Function 中定义 Azure Blob 存储触发器的路径

c# - 为什么我的 Azure Function App 时间戳少了一个小时

Redis maxmemory-policy noeviction 但键消失无误

azure - Azure Function 输出绑定(bind)是否有重试策略?

android - 从在 Docker 中运行的 Android 模拟器连接到 Redis

php - Laravel 5.6 降低 redis 队列性能

redis - Redis "Pattern: Reliable queue"的代码实现