public void Does_throw_TimeoutException_when_PoolTimeout_exceeded() { var config = new RedisClientManagerConfig { MaxWritePoolSize = 4, MaxReadPoolSize = 4, AutoStart = false }; using (var manager = new PooledRedisClientManager(this._testReadWriteHosts, this._testReadOnlyHosts, config)) { manager.PoolTimeout = 100; manager.Start(); var masters = Enumerable.Range(0, 4).Select(i => manager.GetClient()).ToList(); Console.WriteLine(masters.Count); try { manager.GetClient(); Assert.Fail("Should throw TimeoutException"); } catch (TimeoutException ex) { Assert.That(ex.Message, Does.StartWith("Redis Timeout expired.")); } var slaves = Enumerable.Range(0, 4).Select(i => manager.GetReadOnlyClient()).ToList(); Console.WriteLine(slaves.Count); try { manager.GetReadOnlyClient(); Assert.Fail("Should throw TimeoutException"); } catch (TimeoutException ex) { Assert.That(ex.Message, Does.StartWith("Redis Timeout expired.")); } } }
/** * @ 构造函数 * @ writeHost 写入数据主机列表 * @ readHost 读取数据主机列表 * @ config 连接池的配置 * @ initalDb 默认连接的数据库,如果config没有指定defaultDb,initalDb 默认为 0,有可能连接不上 * @ poolSizeMultiplier pool大小的跨度 ,计算公式:db * multiplier,如10个数据库,mutiplier为2,则最终pool的大小为:10*2 * @ poolTimeOutSeconds pool超时时间 ,秒 * */ public RedisCacheExpiration(IEnumerable <string> writeHost, IEnumerable <string> readHost, RedisClientManagerConfig config = null, int initalDb = 0, int?poolSizeMultiplier = 10, int?poolTimeOutSeconds = 2) { if (writeHost.IsNullOrEmpty() || readHost.IsNullOrEmpty()) { throw new ArgumentNullException("必须指定参数:writeHost和readHost的值"); } if (config == null) { config = new RedisClientManagerConfig(); } redisPool = new PooledRedisClientManager(writeHost, readHost, config, initalDb, poolSizeMultiplier, poolTimeOutSeconds); if (!config.AutoStart) { redisPool.Start(); } }
public RedisCacheProvider(IConfiguration configuration, ILog ilog) { this.configuration = configuration; this.log = new Log4netHelper(ilog, this.GetType()); if (!int.TryParse(configuration["Vcredit:Cache:Redis:ExpriesDays"], out redisExpries)) { redisExpries = 3; } string enableConfig = configuration["Vcredit:Cache:Redis:Enable"]; bool enable = !string.IsNullOrEmpty(enableConfig) && enableConfig.Equals("true", StringComparison.InvariantCultureIgnoreCase); if (enable) { Close(); try { string[] RedisReadWriteHosts = new string[] { configuration["Vcredit:Cache:Redis:ReadWriteHosts"] }; string[] RedisReadOnlyHosts = new string[] { configuration["Vcredit:Cache:Redis:ReadOnlyHosts"] }; RedisClientManagerConfig config = new RedisClientManagerConfig() { AutoStart = false, MaxReadPoolSize = 200, MaxWritePoolSize = 50 }; redisManager = new PooledRedisClientManager(RedisReadWriteHosts, RedisReadOnlyHosts, config); //readWriteHosts redisManager.Start(); } catch (Exception ex) { log.Log("实例化PooledRedisClientManager异常。", LogType.Error, ex); } } else { Close(); } redisEnable = enable; }
public void Does_throw_TimeoutException_when_PoolTimeout_exceeded() { using (var manager = new PooledRedisClientManager(testReadWriteHosts, testReadOnlyHosts, new RedisClientManagerConfig { MaxWritePoolSize = 4, MaxReadPoolSize = 4, AutoStart = false, })) { manager.PoolTimeout = 100; manager.Start(); var masters = 4.Times(i => manager.GetClient()); try { manager.GetClient(); Assert.Fail("Should throw TimeoutException"); } catch (TimeoutException ex) { Assert.That(ex.Message, Does.StartWith("Redis Timeout expired.")); } var replicas = 4.Times(i => manager.GetReadOnlyClient()); try { manager.GetReadOnlyClient(); Assert.Fail("Should throw TimeoutException"); } catch (TimeoutException ex) { Assert.That(ex.Message, Does.StartWith("Redis Timeout expired.")); } } }
private void InitConfig() { var config = ConfigUtils <RedisConfig> .Instance.Get(); if (config == null) { const string msg = "Redis配置文件加载失败!"; _logger.Error(msg); throw new Exception(msg); } var redisConfig = new RedisClientManagerConfig { MaxWritePoolSize = config.WritePoolSize, MaxReadPoolSize = config.ReadPoolSize, AutoStart = config.AutoStart, DefaultDb = config.DefaultDb }; _manager = new PooledRedisClientManager(config.ReadAndWriteServers.Select(t => t.ToString()), config.ReadOnlyServers.Select(t => t.ToString()), redisConfig, 0, 50, 5); _manager.Start(); }
/// <summary> /// init /// </summary> /// <param name="setting">pool setting</param> public static void Initialize(RedisPoolSetting setting) { string[] readWriteHosts = setting.Host.Split(','); string[] readOnlyHosts = setting.ReadOnlyHost.Split(','); var redisConfig = new RedisClientManagerConfig { MaxWritePoolSize = setting.MaxWritePoolSize, MaxReadPoolSize = setting.MaxReadPoolSize, DefaultDb = setting.DbIndex, AutoStart = false }; _pooledRedis = new PooledRedisClientManager(readWriteHosts, readOnlyHosts, redisConfig); if (setting.ConnectTimeout > 0) { _pooledRedis.ConnectTimeout = setting.ConnectTimeout; } if (setting.PoolTimeOut > 0) { _pooledRedis.PoolTimeout = setting.PoolTimeOut; } _pooledRedis.Start(); }
/// <summary> /// 创建链接池管理对象 /// </summary> private static void CreateManager() { try { // ip1:端口1,ip2:端口2 var serverlist = ConfigurationManager.AppSettings["Redis.ServerList"].Split(','); prcm = new PooledRedisClientManager(serverlist, serverlist, new RedisClientManagerConfig { MaxWritePoolSize = 400, MaxReadPoolSize = 400, AutoStart = true }); // 连接配置 //prcm.ConnectTimeout = config.ConnectTimeout; //prcm.PoolTimeOut = config.PoolTimeOut; //prcm.SocketSendTimeout = config.SocketSendTimeout; //prcm.SocketReceiveTimeout = config.SocketReceiveTimeout; prcm.Start(); } catch (Exception exception) { } }
public void Does_throw_TimeoutException_when_PoolTimeout_exceeded() { using (var manager = new PooledRedisClientManager(testReadWriteHosts, testReadOnlyHosts, new RedisClientManagerConfig { MaxWritePoolSize = 4, MaxReadPoolSize = 4, AutoStart = false, })) { manager.PoolTimeout = 100; manager.Start(); var masters = 4.Times(i => manager.GetClient()); try { manager.GetClient(); Assert.Fail("Should throw TimeoutException"); } catch (TimeoutException ex) { Assert.That(ex.Message, Is.StringStarting("Redis Timeout expired.")); } var slaves = 4.Times(i => manager.GetReadOnlyClient()); try { manager.GetReadOnlyClient(); Assert.Fail("Should throw TimeoutException"); } catch (TimeoutException ex) { Assert.That(ex.Message, Is.StringStarting("Redis Timeout expired.")); } } }