public static String getNodeKey(Client client) { return client.getHost() + ":" + client.getPort(); }
@Override public boolean validateObject(PooledObject<Jedis> pooledJedis) { final BinaryJedis jedis = pooledJedis.getObject(); try { HostAndPort hostAndPort = this.hostAndPort.get(); String connectionHost = jedis.getClient().getHost(); int connectionPort = jedis.getClient().getPort(); return hostAndPort.getHost().equals(connectionHost) && hostAndPort.getPort() == connectionPort && jedis.isConnected() && jedis.ping().equals("PONG"); } catch (final Exception e) { return false; } } }
public void discoverClusterNodesAndSlots(Jedis jedis) { w.lock(); try { this.nodes.clear(); this.slots.clear(); String localNodes = jedis.clusterNodes(); for (String nodeInfo : localNodes.split("\n")) { ClusterNodeInformation clusterNodeInfo = nodeInfoParser.parse(nodeInfo, new HostAndPort( jedis.getClient().getHost(), jedis.getClient().getPort())); HostAndPort targetNode = clusterNodeInfo.getNode(); setNodeIfNotExist(targetNode); assignSlotsToNode(clusterNodeInfo.getAvailableSlots(), targetNode); } } finally { w.unlock(); } }
public Jedis getNewJedis(String channel, int timeout) { Jedis jedis = getJedis(channel); try { String host = jedis.getClient().getHost(); int port = jedis.getClient().getPort(); Jedis newJedis = new Jedis(host, port, timeout); String pong = newJedis.ping(); if (pong == null || !pong.equals("PONG")) { throw new JedisException("SubPubCluster:jedis is not ping !"); } return newJedis; } finally { releaseConnection(jedis); } }
@Override public Jedis getResource() { while (true) { Jedis jedis = super.getResource(); jedis.setDataSource(this); // get a reference because it can change concurrently final HostAndPort master = currentHostMaster; final HostAndPort connection = new HostAndPort(jedis.getClient().getHost(), jedis.getClient() .getPort()); if (master.equals(connection)) { // connected to the correct master return jedis; } else { returnBrokenResource(jedis); } } }
Jedis connection=(Jedis) field.get(redisClient); Assert.assertEquals(6379, connection.getClient().getPort()); Assert.assertEquals("localhost", connection.getClient().getHost()); Assert.assertEquals(20000, connection.getClient().getConnectionTimeout());
public static String getNodeKey(Client client) { return client.getHost() + ":" + client.getPort(); }
public Jedis get() throws JedisException { Jedis jedis = context.get(); if(jedis != null)return jedis; try { jedis = jedisPool.getResource(); } catch (JedisException e) { if(jedis!=null){ jedis.close(); } throw e; } context.set(jedis); if(logger.isTraceEnabled()){ logger.trace(">>get a redis conn[{}],Host:{}",jedis.toString(),jedis.getClient().getHost()); } return jedis; }
public Jedis get() throws JedisException { Jedis jedis = context.get(); if(jedis != null)return jedis; try { jedis = jedisPool.getResource(); } catch (JedisException e) { if(jedis!=null){ jedis.close(); } throw e; } context.set(jedis); if(logger.isTraceEnabled()){ logger.trace(">>get a redis conn[{}],Host:{}",jedis.toString(),jedis.getClient().getHost()); } return jedis; }
@Override public boolean validateObject(PooledObject<BinaryJedis> pooledJedis) { final BinaryJedis jedis = pooledJedis.getObject(); try { HostAndPort hostAndPort = this.hostAndPort.get(); String connectionHost = jedis.getClient().getHost(); int connectionPort = jedis.getClient().getPort(); return hostAndPort.getHost().equals(connectionHost) && hostAndPort.getPort() == connectionPort && jedis.isConnected() && jedis.ping().equals("PONG"); } catch (final Exception e) { return false; } } }
@Override public boolean validateObject(PooledObject<Jedis> p) { BinaryJedis jedis = (BinaryJedis) p.getObject(); try { HostAndPort hostAndPort = (HostAndPort) this.hostAndPort.get(); String connectionHost = jedis.getClient().getHost(); int connectionPort = jedis.getClient().getPort(); return ((hostAndPort.getHost().equals(connectionHost)) && (hostAndPort.getPort() == connectionPort) && (jedis.isConnected()) && (jedis.ping().equals("PONG"))); } catch (Exception e) { } return false; }
@Override public boolean validateObject(PooledObject<Jedis> pooledJedis) { final BinaryJedis jedis = pooledJedis.getObject(); try { HostAndPort hostAndPort = this.hostAndPort.get(); String connectionHost = jedis.getClient().getHost(); int connectionPort = jedis.getClient().getPort(); return hostAndPort.getHost().equals(connectionHost) && hostAndPort.getPort() == connectionPort && jedis.isConnected() && jedis.ping().equals("PONG"); } catch (final Exception e) { return false; } } }
/** * 代理一些特定的方法 */ protected Object processSpecialMethods(Method method, Object[] objects) { if ("getJedisFromPool".equals(method.getName())) { BdrpNode node = nodeManager.getNode(); Assert.notNull(node, "Can't obtain a property BdrpNode!"); return node.getJedis(); } if ("returnJedisToPool".equals(method.getName())) { Assert.isTrue(objects != null && objects.length == 1); Jedis jedis = (Jedis) objects[0]; String nodeName = jedis.getClient().getHost() + ":" + jedis.getClient().getPort(); BdrpNode node = nodeManager.getNode(nodeName); if (node == null) { return "OK"; } if (BdrpUtils.validateJedis(jedis)) { node.returnJedis(jedis); } else { node.returnBrokenJedis(jedis); nodeManager.refreshDisabledNodes(); } return "OK"; } return null; }
private static void testFailJedisMap() { LOGGER.logMessage(LogLevel.DEBUG, "开始轮询连接失败的服务器列表"); for (List<Jedis> list : failReadMap.values()) { List<Jedis> newList = JedisUtil.copy(list); for (Jedis j : newList) { LOGGER.logMessage(LogLevel.DEBUG, "开始尝试连接的服务器:{}:{}", j .getClient().getHost(), j.getClient().getPort()); boolean sucess = testFailJedis(j); if (sucess) { LOGGER.logMessage(LogLevel.DEBUG, "连接成功,从fail列表中删除"); list.remove(j); } LOGGER.logMessage(LogLevel.DEBUG, "连接服务器:{}:{}结束", j .getClient().getHost(), j.getClient().getPort()); } } LOGGER.logMessage(LogLevel.DEBUG, "轮询连接失败的服务器列表结束"); }
@Test public void masterSetSlaveGet(){ Date now = new Date(); String nowTime = String.format("%tF %tT", now, now); Pool<MasterSlaveJedis> pool = this.getJedisPool(); MasterSlaveJedis masterSlaveJedis = pool.getResource(); System.out.println(">>> masterSlaveJedis = " + masterSlaveJedis.getClient().getHost() + ":" + masterSlaveJedis.getClient().getPort()); System.out.println(">>> nowTime = " + nowTime); masterSlaveJedis.set("current_time", nowTime); LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(200)); System.out.println("--------------------------------------"); Jedis slaveJedis = masterSlaveJedis.opsForSlave(); System.out.println(">>> slaveJedis = " + slaveJedis.getClient().getHost() + ":" + slaveJedis.getClient().getPort()); System.out.println(">>> nowTime = " + slaveJedis.get("current_time")); //slaveJedis.set("current_time", nowTime + ".000"); // slave节点默认是只读的,如果在只读的slave节点上进行写操作会抛出异常 pool.returnResource(masterSlaveJedis); System.out.println("--------------------------------------"); pool.destroy(); }
@Override public Jedis getResource() { while (true) { Jedis jedis = super.getResource(); // get a reference because it can change concurrently final HostAndPort master = currentHostMaster; final HostAndPort connection = new HostAndPort(jedis.getClient() .getHost(), jedis.getClient().getPort()); if (master.equals(connection)) { // connected to the correct master return jedis; } else { invalidateResource(jedis); } } }
@Test public void getResource() throws Exception { Jedis master = null; try { master = this.getJedisPool().getResource(); System.out.println(String.format(">>> jedis = %s", master)); System.out.println(master.getClient().getHost() + ":" + master.getClient().getPort()); //System.out.println(jedis.info()); //看以看出此处的jedis实例指向的是master Date now = new Date(); master.set("current_time", String.format("%tF %tT", now, now)); master.incr("COUNT"); } finally { if(master != null){ this.getJedisPool().returnResource(master); } } }
@Test public void masterSlaveFailover() throws Exception { Pool<MasterSlaveJedis> pool = this.getJedisPool(); MasterSlaveJedis masterSlaveJedis = pool.getResource(); System.out.println(">>> masterSlaveJedis = " + masterSlaveJedis.getClient().getHost() + ":" + masterSlaveJedis.getClient().getPort()); pool.returnResource(masterSlaveJedis); System.out.println("--------------------------------------"); masterSlaveJedis = pool.getResource(); System.out.println(">>> masterSlaveJedis = " + masterSlaveJedis.getClient().getHost() + ":" + masterSlaveJedis.getClient().getPort()); pool.returnResource(masterSlaveJedis); Thread.sleep(120000L * 10); masterSlaveJedis = pool.getResource(); System.out.println(">>> masterSlaveJedis = " + masterSlaveJedis.getClient().getHost() + ":" + masterSlaveJedis.getClient().getPort()); pool.returnResource(masterSlaveJedis); System.out.println("--------------------------------------"); pool.destroy(); }
@Test public void getRourceAndReturnResource(){ Pool<MasterSlaveJedis> pool = this.getJedisPool(); MasterSlaveJedis masterSlaveJedis = pool.getResource(); System.out.println(">>> masterSlaveJedis = " + masterSlaveJedis); pool.returnResource(masterSlaveJedis); System.out.println("--------------------------------------"); for(int i = 0; i < 10; i++){ masterSlaveJedis = pool.getResource(); Jedis slaveJedis = masterSlaveJedis.opsForSlave(String.valueOf(i)); System.out.println(">>> slaveJedis = " + slaveJedis.getClient().getHost() + ":" + slaveJedis.getClient().getPort()); pool.returnResource(masterSlaveJedis); } System.out.println("--------------------------------------"); System.out.println(">>> pool = " + pool); pool.destroy(); System.out.println(">>> pool = " + pool); System.out.println(pool.getResource());// 如果pool已经被销毁,调用pool.getResource()会抛出"Can not get a resource from pool"异常 }
@Override public Jedis getResource() { while (true) { Jedis jedis = super.getResource(); jedis.setDataSource(this); // get a reference because it can change concurrently final HostAndPort master = currentHostMaster; final HostAndPort connection = new HostAndPort(jedis.getClient().getHost(), jedis.getClient() .getPort()); if (master.equals(connection)) { // connected to the correct master return jedis; } else { returnBrokenResource(jedis); } } }