jedis

 

jedis :数据库

Jedis pool:app

 

jedis:tcp

        Jedis jedis2 = new Jedis(R_HOST, R_PORT + 1);
        jedis2.append("username", "zhangsan");

Jedis Pool:spa

JedisShardInfo jedis = new JedisShardInfo(R_HOST, R_PORT + 1, false);
        JedisShardInfo jedisSlave = new JedisShardInfo(R_HOST, R_PORT, false);
        List<JedisShardInfo> jedisList = new ArrayList<JedisShardInfo>();
        jedisList.add(jedisSlave);
        jedisList.add(jedis);
        
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        ShardedJedisPool pool = new ShardedJedisPool(poolConfig, jedisList,  Hashing.MURMUR_HASH, Sharded.DEFAULT_KEY_TAG_PATTERN);
        ShardedJedis sharedJedis = pool.getResource();

注意poolConfig中的内容:.net

     //   poolConfig.get("testOnBorrow")线程

  • TestOnBorrow=false时,因为不检测池里链接的可用性,因而假如链接池中的链接被数据库关闭了,应用经过链接池getConnection时,均可能获取到这些不可用的链接,且这些链接若是不被其余线程回收的话,它们不会被链接池被废除,也不会从新被建立,占用了链接池的名额。
  • ① 集群某实例宕掉时,若是链接恰好不处于通讯阶段,tcp链接正处于CLOSE_WAIT状态或已关闭,当应用经过链接池getConnection时,在borrow时会检测链接,因为链接已关闭,因而报了以下报错,并从新创建新链接,此时的新链接到集群的其余实例上了。后面能正常通讯。
  • ② 集群某实例宕掉时,若是链接恰好处于通讯阶段,因为客户端没法当即感知服务端已断链接,它可能会报以下错误,等待服务端的响应超时报错。当应用经过链接池getConnection时,在borrow时会检测链接,因为链接已关闭,因而报了以下报错,并从新创建新链接,此时的新链接到集群的其余实例上了。后面能正常通讯。

 

参考文章: https://blog.csdn.net/wangyangzhizhou/article/details/52209336code

相关文章
相关标签/搜索