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建议开启,请注意应用本身也需要开启。

参考:
https://blog.csdn.net/u010648555/article/details/103858684

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐