我经常收到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); .... } } }
这是由于Redis在Hyper-V上作为虚拟机托管的Ubuntu上运行而导致的延迟问题引起的。
通过移至物理Linux机箱,我们解决了该问题,将延迟降低了45%。