JedisCluster和springboot整合
Posted 南望孤笑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JedisCluster和springboot整合相关的知识,希望对你有一定的参考价值。
maven依赖
springboot整合jedisCluster相当简单,maven依赖如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
加了这一个依赖之后就不要再加上jedis的这一个依赖了:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
加这个可能在本身测试的时候,可能会导致jedisCluster对象正常,但是在测试的时候会发现set数据的时候会出现问题,我把jedis的依赖去掉之后,这个问题解决,因此不要加上jedis的这一个依赖,spring-boot-starter-redis这一个引入相关jedis需要的包。
application.properties配置
这里的配置相当简单,只需要天上redis的相关地址就行了,如下:
#redis cluster
spring.redis.cache.clusterNodes=192.168.xx.xx:6379,192.168.xx.:6380,192.168.xx.xx:6381
spring.redis.cache.commandTimeout=5000
相当简单只需要几个redis的地址和端口的字符串就可以了。
redisProperties
在这里取springboot中的配置办法相当多,可以使用如下方法:
@Inject private Environment environment; String properties = environment.getproperties("xxx")
或者是在加上注解,@Value(“”)会在配置文件中取相关名字的配置。
但在本文中决定使用另外一种方法,定义一个类命名问RedisProperties,在里面定义的字段与配置文件中相对应,即可取到配置,如下:
@Component @ConfigurationProperties(prefix = "spring.redis.cache") @Data public class RedisProperties { private String clusterNodes; private Integer commandTimeout; }
如上,在使用时就能正常取到相关配置。
JedisClusterConfig
/** * 获取JedisCluster的配置 */ @Configuration @ConditionalOnClass({JedisCluster.class}) @EnableConfigurationProperties(RedisProperties.class) public class JedisClusterConfig { @Inject private RedisProperties redisProperties; @Bean @Singleton public JedisCluster getJedisCluster() { String[] serverArray = redisProperties.getClusterNodes().split(","); Set<HostAndPort> nodes = new HashSet<>(); for (String ipPort: serverArray) { String[] ipPortPair = ipPort.split(":"); nodes.add(new HostAndPort(ipPortPair[0].trim(),Integer.valueOf(ipPortPair[1].trim()))); } return new JedisCluster(nodes, redisProperties.getCommandTimeout()); }
如上,配置就完成,现在进行测试一次。
测试
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringBootWebApplication.class) @WebAppConfiguration public class TestJedisCluster { @Inject private JedisCluster jedisCluster; @Test public void testJedis() { jedisCluster.set("test_jedis_cluster", "38967"); Assert.assertEquals("38967", jedisCluster.get("test_jedis_cluster")); jedisCluster.del("test_jedis_cluster"); } }
以上是关于JedisCluster和springboot整合的主要内容,如果未能解决你的问题,请参考以下文章
springboot + jediscluster怎么集成多个集群
spring集成 JedisCluster 连接 redis3.0 集群
jedis,spring-redis-data 整合使用,版本问题异常