【问题标题】:Error connecting to Redis on .net Core app hosted on Azure在 Azure 上托管的 .net Core 应用上连接到 Redis 时出错
【发布时间】:2017-10-30 05:51:12
【问题描述】:

我们在 Azure 上托管了一个 redis 缓存,我们在 .net 核心应用程序中使用以下内容作为服务:

services.AddSingleton<IConnectionMultiplexer>(provider => 
    ConnectionMultiplexer.Connect(Configuration.GetConnectionString("RedisConnection"))
);

我们的连接字符串类似如下:

ourserver.redis.cache.windows.net:6380,password=******=,ssl=True,abortConnect=False,syncTimeout=4000

在从缓存中获取时我们不会遇到问题,但是如果我们添加到缓存中,我们有时会收到以下错误:

“StackExchange.Redis.RedisConnectionException:不可能 连接到 redis 服务器;创建一个断开的多路复用器, 禁用 AbortOnConnectFail。连接超时”

我已经阅读了诸如将abortconnect 设置为false 并增加超时的解决方案,但我已经像上面的连接字符串一样实现了它。

如果您有建议或认为我们的连接字符串有问题,请提出建议。

更新:我们已经实施了解决连接问题的解决方案,但现在我们得到了:

StackExchange.Redis.RedisConnectionException: No connection is available to service this operation

【问题讨论】:

    标签: azure caching redis asp.net-core stackexchange.redis


    【解决方案1】:

    您的 connectTimeout 设置为多少?你可以尝试增加它,看看它是否有帮助?

    【讨论】:

    • 请参见上面的连接字符串。超时为 4000
    • 4000 是您的 syncTimout(即您的操作超时)。还有另一个名为“connectTimeout”的属性,它是专门用于连接的超时时间。如果没改的话应该是5000(默认值)
    • 非常感谢。请问推荐的connecttimeout是多少?
    • 默认值 5000 应该足够了,除非您要跨区域并且可能需要增加它。我看到您提到>>>>“在从缓存中获取时,我们不会遇到问题,但是如果我们添加到缓存中,有时会出现以下错误”。这很有趣,因为只有 SET 会失败,而 GET 不会失败。每次进行 SET 时,您可能会重新创建连接吗?你能展示你是如何设置然后使用 ConnectionMultiplexer 的吗?这也可能是 NET Core 二进制文件中 Nuget 包的稳定性问题。您使用的是哪个 NuGet 包版本?
    • 对不起,它似乎甚至发生在 get... 在首先实现 isconnected() 之后,我现在得到这个错误:没有可用的连接来服务这个操作
    猜你喜欢
    • 2017-11-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2018-06-13
    • 1970-01-01
    相关资源
    最近更新 更多