ServiceStack.Redis:无法连接:sPort:

时间:2013-12-04 19:22:21

标签: redis servicestack connection-pooling

我经常得到 ServiceStack.Redis:无法连接:sPort:0或ServiceStack.Redis:无法连接:sPort:50071(或其他端口号)。

这似乎发生在我们的网站比较繁忙时。 Redis本身看起来很好,没有真正增加CPU或内存使用量。

我正在使用连接池,并尝试更改超时值但未成功。

public sealed class RedisConnection
{
    // parameter values are:
    // Config.Settings.RedisPoolSize = 10000
    // Config.Settings.RedisPoolTimeoutSeconds = 2
    // Config.Settings.RemoteCacheServerName = 192.168.10.12
    private static readonly PooledRedisClientManager instance
        = new PooledRedisClientManager(Config.Settings.RedisPoolSize,
                                       Config.Settings.RedisPoolTimeoutSeconds,
                                       new string[] { Config.Settings.RemoteCacheServerName })
        {
            ConnectTimeout = 1500
        };

    static RedisConnection()
    {
    }

    public static PooledRedisClientManager Instance
    {
        get
        {
            return instance;
        }
    }
}

用法是这样的:

public sealed class Caching
{
    public static T GetCacheSingle<T>(string key)
    {
    using (var redisClient = RedisConnection.Instance.GetReadOnlyClient())
    {
            var value = redisClient.Get<byte[]>(key);
            ....
    }
    }
}

1 个答案:

答案 0 :(得分:3)

这是由于Redis在作为Hyper-V上的虚拟机托管的Ubuntu上运行而导致的延迟问题。

我们通过迁移到物理Linux机箱来解决问题,从而将延迟降低了45%。