使用stackexchange.redis存储到azure托管redis缓存时出现问题

mzillmmw  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(332)

我无法将字符串值存储到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;
    }

db.stringset方法上的最后一次try/catch时出错。我得到这个信息:
没有可用于服务此操作的连接:set mykey;阻塞操作被wsacancelblockingcall调用中断;iocp:(忙=0,空闲=1000,最小=4,最大=1000),工作线程:(忙=2,空闲=1021,最小=4,最大=1023),本地cpu:n/a

rxztt3cl

rxztt3cl1#

我在azureredis缓存上将最小tls版本设置为1.2时也遇到了同样的错误,这是由tls不匹配引起的。通过以下措施解决了这一问题。
添加 sslprotocols=tls12 到连接字符串
添加 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 到tls密码套件
以下是详细信息,请将tls 1.0和1.1从azure cache for redis中删除

相关问题