Spring boo项目通过JedisCluster整合redis集群(redis有密码)

SpringBoot + Redis集群的整合:

1、首先要在maven中引入redis的jar包,因为spring boot 对redis的支持非常好,所以只需要引入下面一个jar就可以了:

		
			org.springframework.boot
			spring-boot-starter-data-redis
		

2、在application.properties文件中加入配置你的集群等一些必要的信息。yml文件同理,可能就是写法不同,下面我只提供了properties文件的代码:

# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
spring.redis.commandTimeout=5000

# redis.cluster 集群
spring.redis.cluster.nodes=172.16.100.51:6379,172.16.100.54:6379,172.16.100.57:6379
#redis的密码
spring.redis.password=123456

3、添加redis的配置类:

@Configuration
@ConditionalOnClass({JedisCluster.class})
public class RedisConfig {
	@Value("${spring.redis.cluster.nodes}")
	private String clusterNodes;
	@Value("${spring.redis.timeout}")
	private int timeout;
	@Value("${spring.redis.pool.max-idle}")
	private int maxIdle;
	@Value("${spring.redis.pool.max-wait}")
	private long maxWaitMillis;
	@Value("${spring.redis.commandTimeout}")
	private int commandTimeout;
	@Value("${spring.redis.password}")
	private String password;

	@Bean
	public JedisCluster getJedisCluster() {
		String[] cNodes = clusterNodes.split(",");
		Set nodes = new HashSet<>();
		//分割出集群节点
		for (String node : cNodes) {
			String[] hp = node.split(":");
			nodes.add(new HostAndPort(hp[0], Integer.parseInt(hp[1])));
		}
		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		jedisPoolConfig.setMaxIdle(maxIdle);
		jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
		//创建集群对象。没有密码的请使用这一个
       // JedisCluster jedisCluster = new JedisCluster(nodes,commandTimeout); 
       //有密码的请使用这一个。 我这里是redis有密码的所以我使用的这一个
		return new JedisCluster(nodes,commandTimeout,commandTimeout,5,password, jedisPoolConfig);
	}

	/**
	 * 设置数据存入redis 的序列化方式
	 * 
redisTemplate序列化默认使用的jdkSerializeable,存储二进制字节码,导致key会出现乱码,所以自定义 * 序列化类 * * @paramredisConnectionFactory */ @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.afterPropertiesSet(); return redisTemplate; } }

4、测试

@RestController
public class TestController {

	@Autowired
	private JedisCluster jedisCluster;

	private static final String blockTokenPrefix = "BLKT";

	@RequestMapping(value = "/test")
	public String test(HttpServletRequest request, HttpServletResponse response) {
		StringBuilder result = new StringBuilder();
		result.append("hello !");
		String value = jedisCluster.get(blockTokenPrefix + "-" + "chang_FangKa");
		result.append(value);
		return result.toString();
	}
}

5、结果是正常输出了redis中的值。结果我就不复制出来了。

你可能感兴趣的:(java中级)