SpringBoot实现Jedis连接ipv6集群

一、pom文件添加Jedis依赖

<dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>3.0.1</version>
</dependency>

二、JedisCluster连接ipv6小测试

@Test
    public void testJedisCluster()throws Exception{
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("::1",7001));
        nodes.add(new HostAndPort("::1",7002));
        nodes.add(new HostAndPort("::1",7003));
        nodes.add(new HostAndPort("::1",7004));
        nodes.add(new HostAndPort("::1",7005));
        JedisCluster jedisCluster = new JedisCluster(nodes,1000,1000,1,"123456" ,new GenericObjectPoolConfig());
        jedisCluster.set("test", "my jedisCluster test");
        String str = jedisCluster.get("test");
        System.out.println(str);
        //jedisCluster.close(); // springboot执行close()会报错
    }

三、Jedis读取配置文件信息

参考文章

读取配置文件信息可以参考另一篇随笔:SpringBoot读取.yml/.properties配置文件

配置文件例子:

test:
      max-redirects: 5
      ip-nodes: ::1/7000,::1/7001,::1/7002,::1/7004
      open: false  # 是否开启redis缓存  true开启   false关闭
      database: 0
      password: 123456    # 密码(默认为空)
      timeout: 6000  # 连接超时时长(毫秒)
      jedis:
        max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1      # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 10      # 连接池中的最大空闲连接
        min-idle: 5       # 连接池中的最小空闲连接

读取配置信息,创建JedisCluster

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import java.util.HashSet;
import java.util.Set;

@Configuration
@PropertySource("classpath:bootstrap.yml")
public class JedisClusterConfig {
    @Value("${test.ip-nodes}")
    private String clusterNodes;
    @Value("${test.password}")
    private String password;
    @Value("${test.timeout}")
    private Integer timeout;
    @Value("${test.jedis.max-active}")
    private Integer maxActive;
    @Value("${test.jedis.max-wait}")
    private Integer maxWait;
    @Value("${test.jedis.max-idle}")
    private Integer maxIdle;
    @Value("${test.jedis.min-idle}")
    private Integer minIdle;

    @Bean
    public JedisCluster getJedisCluster() {
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        config.setMaxWaitMillis(maxWait);
        config.setMinIdle(minIdle);
        config.setMaxIdle(maxIdle);
        String[] serverArray = clusterNodes.split(","); // 获取集群ip数组;
        Set<HostAndPort> nodes = new HashSet<>();
        for (String ipPort : serverArray) {
            String[] ipPortPair = ipPort.split("/",2); // 分割ip和port
            nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));
        }
        JedisCluster jedisCluster = new JedisCluster(nodes,timeout,timeout,1,password ,config);
        jedisCluster.set("test", "my jedisCluster test");
        String str = jedisCluster.get("test");
        System.out.println(str);
        return jedisCluster;
    }
}
posted @ 2020-06-30 11:14  antguo  阅读(3076)  评论(2编辑  收藏  举报