SpringBoot整合Redis集群(JedisCluster)

简单SpringBoot项目的搭建:https://blog.csdn.net/HuanBuXingDeXingXing/article/details/109670434

Pom.xml文件添加Maven依赖:

这里由于parent中已经包含版本号了,此处不应该再指定版本号 



   redis.clients
   jedis




   org.apache.commons
   commons-lang3
   3.6

新增application-dev.yml文件,配置redis连接信息

#redis_config
spring:
  redis:
    #redis集群基础配置
    cluster:
      nodes: 10.75.13.212:7010,10.75.13.16:7010,10.75.13.23:7010   #集群连接节点,多个逗号分隔
    password: f^27tgKK123                                          #连接密码
    timeout: 0                  # 连接超时时间(毫秒)
    commandTimeout: 5000        #设置命令的执行时间,如果超过这个时间,则报错;
    ## 使用jedis连接池
    jedis:
      pool:
        max-idle: 16            # 连接池中的最大空闲连接
        min-idle: 0             # 连接池中的最小空闲连接
        max-active: 8           # 连接池最大连接数(使用负值表示没有限制)
        max-wait: 100000        # 连接池最大阻塞等待时间(使用负值表示没有限制)

在application.properties文件中,指定读取application-dev.yml文件的配置

#读取配置文件类型选择
spring.profiles.active=dev

 配置自动注入JedisCluster

package com.zx.demo.config;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.apache.commons.lang3.StringUtils;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
@Configuration
@ConditionalOnClass({JedisCluster.class})
public class RedisAutoConfiguration {

	@Value("${spring.redis.cluster.nodes}")
	private String clusterNodes;
	@Value("${spring.redis.password}")
	private String password;
	@Value("${spring.redis.commandTimeout}")
	private int commandTimeout;
	@Value("${spring.redis.jedis.pool.max-active}")
	private int maxTotal;
	@Value("${spring.redis.jedis.pool.min-idle}")
	private int minIdle;
	@Value("${spring.redis.jedis.pool.max-idle}")
	private int maxIdle;
	@Value("${spring.redis.jedis.pool.max-wait}")
	private long maxWaitMillis;
	
	@Bean
	public JedisCluster getJedisCluster() {
		Set nodes = new HashSet<>();
		//分割出集群节点
		String[] cNodes = clusterNodes.split(",");
		Arrays.stream(cNodes).filter(StringUtils::isNotBlank).forEach(c->{
			String[] hp = c.split(":");
			nodes.add(new HostAndPort(hp[0], Integer.parseInt(hp[1])));
		});
		JedisCluster jedisCluster = null;
		if(nodes.size() > 0) {
			 GenericObjectPoolConfig pool = new GenericObjectPoolConfig();
	         pool.setMaxTotal(maxTotal);
	         pool.setMinIdle(minIdle);
	         pool.setMaxIdle(maxIdle);
	         pool.setMaxWaitMillis(maxWaitMillis);
	         // 连接耗尽时是否阻塞, false报异常,true阻塞直到超时, 默认true
			 pool.setBlockWhenExhausted(true);
	         // 设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)
	         pool.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
	         // 是否启用pool的jmx管理功能, 默认true
	         pool.setJmxEnabled(true);
	         // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
	         pool.setTestOnBorrow(true);
			//创建集群对象。没有密码的请使用这一个
	        // JedisCluster jedisCluster = new JedisCluster(nodes,commandTimeout); 
	        //有密码的请使用这一个。 我这里是redis有密码的所以我使用的这一个
	        jedisCluster =  new JedisCluster(nodes,commandTimeout,commandTimeout,5,password, pool);
		}
		return jedisCluster;
	}
}

到此,配置基本完成,后面可以使用了 。

简单测试使用

package com.zx.demo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.JedisCluster;
@SpringBootTest
public class JedisClusterTest {

    @Autowired
    JedisCluster jedisCluster;

    @Test
    public void testSet(){
        System.out.println(jedisCluster.get("key1"));
        jedisCluster.set("key1","hello");
        System.out.println(jedisCluster.get("key1"));
    }
}

junit运行此测试方法,控制台输出:

SpringBoot整合Redis集群(JedisCluster)_第1张图片

至此,说明我们的配置对于redis集群数据的存放和查询是没问题的,完结!

如有此基础上的集群工具方法使用需求,参考:https://blog.csdn.net/HuanBuXingDeXingXing/article/details/109678004

 

你可能感兴趣的:(redis,SpringBoot,redis,spring,boot,分布式)