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();
            }
        }
    }
}

redis 切换db命令 rediscli切换节点_参数设置

参数

说明

默认值

建议

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

建议开启,请注意应用本身也需要开启。