redis cluster集群会在主节点不可达超时之后自动将从节点切换为主节点。连接到故障节点连接对象将无法使用,必须对连接对象进行检查并重新建立到新节点的连接, 连接池的poolConfig.setTestOnBorrow(true);可以在使用前做这种检查,在集群的主从切换完成后,会自动建立新连接到新的主节点。
import java.util.LinkedHashSet;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolConfigTest
{
public static void main(String[] args)
{
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大连接数
poolConfig.setMaxTotal(10);
// 最大空闲数
poolConfig.setMaxIdle(10);
poolConfig.setMinIdle(2);
poolConfig.setBlockWhenExhausted(true);
poolConfig.setMaxWaitMillis(30 * 1000);
//使用前检查连接是否正常,剔除无效连接,在主从切换后可以做到自动重连
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setMaxWaitMillis(30 * 1000);
poolConfig.setTimeBetweenEvictionRunsMillis(10 * 1000);
poolConfig.setMinEvictableIdleTimeMillis(30 * 1000);
Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.129.112", 7002));
nodes.add(new HostAndPort("192.168.129.112", 7003));
nodes.add(new HostAndPort("192.168.129.113", 7005));
nodes.add(new HostAndPort("192.168.129.113", 7004));
nodes.add(new HostAndPort("192.168.129.111", 7007));
nodes.add(new HostAndPort("192.168.129.111", 7006));
JedisCluster cluster = new JedisCluster(nodes, poolConfig);
while (true)
{
try
{
String name = cluster.get("name");
System.out.println(name);
cluster.set("age", "18");
System.out.println(cluster.get("age"));
Thread.sleep(7000);
// cluster.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
参数 | 说明 | 默认值 | 建议 |
maxTotal | 资源池中的最大连接数 | 8 | 参见关键参数设置建议 |
maxIdle | 资源池允许的最大空闲连接数 | 8 | 参见关键参数设置建议 |
minIdle | 资源池确保的最少空闲连接数 | 0 | 参见关键参数设置建议 |
blockWhenExhausted | 当资源池用尽后,调用者是否要等待。只有当值为true时,下面的 | maxWaitMillis才会生效。 | true |
maxWaitMillis | 当资源池连接用尽后,调用者的最大等待时间(单位为毫秒)。 | -1(表示永不超时) | 不建议使用默认值。 |
testOnBorrow | 向资源池借用连接时是否做连接有效性检测(ping)。检测到的无效连接将会被移除。 | false | 业务量很大时候建议设置为false,减少一次ping的开销。 |
testOnReturn | 向资源池归还连接时是否做连接有效性检测(ping)。检测到无效连接将会被移除。 | false | 业务量很大时候建议设置为false,减少一次ping的开销。 |
jmxEnabled | 是否开启JMX监控 | true | 建议开启,请注意应用本身也需要开启。 |