上周spring data redis更新了1.7.1版本,正式支持redis cluster集群模式,这里就介绍一下关于redis cluster集群的相关配置,例如redis连接池等内容。不过想要使用redis cluster集群的话,还是需要你先启动redis cluster才行,具体操作可以参考我之前的redis cluster集群搭建。
?
1、与之前的文章相同,不采用xml,而是使用代码的方式进行配置,首先我们先定义一个redis的配置类:
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "spring.redis.cluster")
public class RedisClusterConfigProperties {
private List<String> nodes;
getter/setter...
}
在这里,需要你自己先定义一个用来保存redis配置的properties或yml文件,如下:
spring.redis.cluster.nodes[0]=192.168.0.1:6379
spring.redis.cluster.nodes[1]=192.168.0.2:6379
或
spring:
redis:
cluster:
nodes:
- 192.168.0.1:6379
- 192.168.0.2:6379
spring会自动读取并将内容set进我们的nodes中,其中,nodes配置多个是为了防止单个节点挂掉,理论上只需要配置一个节点即可。
?
2、配置redis cluster的bean:
@Configuration
public class RedisClusterConfig {
@Autowired
private RedisClusterConfigProperties clusterProperties;
@Bean
private RedisConnectionFactory connectionFactory() {
private JedisConnectionFactory factory = new JedisConnectionFactory(new RedisClusterConfiguration(clusterProperties.getNodes()))
/** 如果需要定制连接池,可以使用下面的方式进行配置 */
// private JedisPoolConfig pool = new JedisPoolConfig();
// pool.setMaxIdle(8)
// pool.setMaxTotal(8)
// pool.set...
// factory.setPoolConfig(pool)
return factory;
}
/**
* 对redis的存取,据需要先行转换成byte[]
**/
@Bean
@Autowired
private RedisClusterConnection redisClusterConnection(RedisConnectionFactory connectionFactory) {
return connectionFactory.getClusterConnection();
}
/**
* 该bean可以直接操作String,无需转成byte[]
**/
@Bean
@Autowired
private StringRedisTemplate stringRedisTemplate(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
}
上述总共配置了3个bean,其中,第一个bean为redis cluster的connection factory,后两个为redis客户端操作模板。
?
在factory中,可以自定义连接池pool,maxIdle与maxTotal分别表示最大空闲连接和总连接,spring默认为我们配置的连接池内,这两项均为8。
?
后 面的两个bean可以直接用,总的来说能用StringRedisTemplate就用,毕竟减少了很多麻烦的操作,只不过一些api与redis命令行 不一样,需要再稍微看一下,而RedisClusterConnection的api就和redis命令行一样了,但是需要先将你的内容转换成 byte[]才行。
?
?
原文:http://zk-chs.iteye.com/blog/2292178