使用 StackExchange.Redis 存储到 Azure 托管的 redis 缓存的问题

mad*_*moe 1 azure redis stackexchange.redis

我永远无法将字符串值存储到 Azure 托管的 Redis 缓存。使用 StackExchange.Redis 版本 2.0.601 和 vs2015 和 vs2019。下面的代码在注释中有错误(基本上即使成功 ConnectionMultiplexer.Connect 也没有建立连接)。

    static bool Connect()
    {           
        ConnectionMultiplexer redis; 

        try
        {
            ConfigurationOptions cfgOptions = new ConfigurationOptions
            {
                EndPoints =
                {
                    {"RedisOnMyAzureServer", myPort}
                },
                AbortOnConnectFail = false,
                Ssl = true,
                ConnectRetry = 3,
                ConnectTimeout = 10000,
                SyncTimeout = 10000,
                DefaultDatabase = 0,
                Password = "myPassword"
            };
            redis = ConnectionMultiplexer.Connect(cfgOptions);   // takes 10.5 seconds on average 
        }
        catch
        { return false; }  // never errors

        // some diagnostics follow

        if (redis.IsConnected) 
            Console.WriteLine("client connection open"); 
        else
            Console.WriteLine("client connection closed");

        if (redis.GetDatabase().IsConnected(default(RedisKey))) 
            Console.WriteLine("database connection open"); 
        else 
            Console.WriteLine("database connection closed");

        // both connection are always closed.

        try
        {
            IDatabase db = redis.GetDatabase();
            db.StringSet("mykey", "value");
        }
        catch
        { return false; }  // always errors 

        return true;
    }
Run Code Online (Sandbox Code Playgroud)

最后尝试/捕获 db.StringSet 方法时出错。我收到这条消息:

没有连接可用于服务此操作:SET mykey; 阻塞操作被调用 WSACancelBlockingCall 中断;IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=2,Free=1021,Min=4,Max=1023), Local-CPU: n/a

小智 7

我在 Azure Redis 缓存上将最低 TLS 版本设置为 1.2 时遇到了同样的错误,这是由 TLS 不匹配引起的。通过以下措施解决。

  • 添加sslprotocols=tls12到连接字符串
  • 添加TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384到 TLS 密码套件

这是详细信息,从 Azure Redis 缓存中删除 TLS 1.0 和 1.1

  • <add key="CacheConnection" value="server:port,password=pwd,ssl=True,abortConnect=False,sslprotocols=tls12" /> 在 web.config 中添加上述密钥并且它有效 (2认同)