StackExchange.Redis StringGet超时

时间:2015-06-01 23:01:53

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

免责声明:我是Redis和StackExchange.Redis客户端的新手。

场景:我有一个使用ASP.NET Session State Provider for Azure Redis Cache的ASP.NET MVC网络应用。

这就像一个魅力!

现在,我的控制器调用我的服务层(它只是一个DLL引用,但有一天可能成为Web Api调用)。我正在尝试使用Autofac配置我的redis客户端,如下所示:

        var redis = ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["redis.connectionstring"]);
        builder.RegisterInstance(redis).AsSelf().SingleInstance();
        builder.RegisterType<RedisCacheClient>().As<ICacheClient>().WithParameter("db", redis.GetDatabase());

连接设置成功,当我在 redis-cli.exe 上运行客户端列表时,我可以看到一个新客户端。

我的RedisCacheClient类只是IDatabase上的一个瘦包装器:

    public void Add(string key, object value)
    {
        _db.StringSet(key, Serialize(value));
    }

    public T Get<T>(string key)
    {
        byte[] buffer = _db.StringGet(key);
        T o = Deserialize<T>(buffer);
        return o;
    }

    private static byte[] Serialize(object o)
    {
        if (o == null)
        {
            throw new ArgumentNullException("Cannot cache null values.");
        }
        var binaryFormatter = new BinaryFormatter();
        using (var memoryStream = new MemoryStream())
        {
            binaryFormatter.Serialize(memoryStream, o);
            byte[] buffer = memoryStream.ToArray();
            return buffer;
        }
    }

    private static T Deserialize<T>(byte[] stream)
    {
        if (stream == null)
        {
            return default(T);
        }
        var binaryFormatter = new BinaryFormatter();
        using (var memoryStream = new MemoryStream(stream))
        {
            T result = (T)binaryFormatter.Deserialize(memoryStream);
            return result;
        }
    }

问题:我可以成功存储对象,但永远无法检索!无论我做什么,我都会不断获得连接超时(当前超时为30秒)。 我花了最后4个小时试图解决这个问题并且没有运气。真的很挣扎:(

我已经经历过的一些资源: http://azure.microsoft.com/blog/2015/02/10/investigating-timeout-exceptions-in-stackexchange-redis-for-azure-redis-cache/

Timeout performing SET {Key}, inst: 0, mgr: Inactive, queue: 2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

StackExchange.Redis with Azure Redis is unusably slow or throws timeout errors

Azure Redis cache - timeouts on GET calls

https://github.com/StackExchange/StackExchange.Redis/issues/122

https://github.com/StackExchange/StackExchange.Redis/issues/83

P.S:我在本地或天蓝色的地方运行它的行为非常相同。

1 个答案:

答案 0 :(得分:0)

尽管我真的不喜欢这个,但我不得不说这个问题早已不复存在,我 不明白为什么。 我认为这是与我的设置有关的某种间歇性问题(MacBook Pro在并行VM上运行Windows),有时可能会使Redis拒绝或不处理其队列中的项目。嗯,这是我唯一可以提出的,因为我已经运行了相同的软件几天,并没有任何问题。