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."));
                }
            }
        }
Ejemplo n.º 2
0
 /**
  * @ 构造函数
  * @ 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();
     }
 }
Ejemplo n.º 3
0
        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."));
                }
            }
        }
Ejemplo n.º 5
0
        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();
        }
Ejemplo n.º 6
0
        /// <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();
        }
Ejemplo n.º 7
0
 /// <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."));
                }
            }
        }