JedisPoolConfig的合理预估配置

  第一步,设置JedisPoolConfig的初次配置

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //设置最大实例总数
        jedisPoolConfig.setMaxTotal(500);
        //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
        jedisPoolConfig.setMaxIdle(100);
        jedisPoolConfig.setMinIdle(100);
        //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
        jedisPoolConfig.setMaxWaitMillis(3 * 1000);
        // 在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的; 
        jedisPoolConfig.setTestOnBorrow(true);
        // 在还会给pool时,是否提前进行validate操作 
        jedisPoolConfig.setTestOnReturn(true);
        jedisPoolConfig.setTestWhileIdle(true);
        jedisPoolConfig.setMinEvictableIdleTimeMillis(500);
        jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(1000);
        jedisPoolConfig.setTimeBetweenEvictionRunsMillis(1000);
        jedisPoolConfig.setNumTestsPerEvictionRun(100);
        return new JedisPool(jedisPoolConfig, HOST, PORT, 5000, null, 0);

    第二步,本地一个tomcat容器的web项目应用,新建url链接,内部业务实现:新建Jedis,调用JedisPool,运行此tomcat。
    第三步,运用jmeter压测工具,200个线程访问此url。
    结果是:单单压测该链接,多次试验,应用qps平均在87q/s,此时redis库实时客户端链接在13个左右,远远没有达到jedisPoolConfig配置的最大连接数MaxTotal 500个及最小空闲数MinIdle 100个。
       同向对比,目前线上单个应用qps在400q/s左右,所有redis库连接池可以配在65个左右(虽然这样做不是很正确,但至少可以这样预估),介于线上业务较复杂,所以把redis库连接池最大连接数MaxTotal暂调到150。

JedisPoolConfig的合理预估配置

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //设置最大实例总数
        jedisPoolConfig.setMaxTotal(150);
        //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
        jedisPoolConfig.setMaxIdle(30);
        jedisPoolConfig.setMinIdle(10);
        //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
        jedisPoolConfig.setMaxWaitMillis(3 * 1000);
        // 在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的; 
        jedisPoolConfig.setTestOnBorrow(true);
        // 在还会给pool时,是否提前进行validate操作 
        jedisPoolConfig.setTestOnReturn(true);
        jedisPoolConfig.setTestWhileIdle(true);
        jedisPoolConfig.setMinEvictableIdleTimeMillis(500);
        jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(1000);
        jedisPoolConfig.setTimeBetweenEvictionRunsMillis(1000);
        jedisPoolConfig.setNumTestsPerEvictionRun(100);
        return new JedisPool(jedisPoolConfig, HOST, PORT, 5000, null, 0);

你可能感兴趣的:(redis,JedisPoolConfig)