springboot配置rediscluster

项目中redis升级,需要集群方案,按照http://www.cnblogs.com/Cratical/p/6811245.html文章中描述搭建集群方案后,后台WEB服务无法正常运行:redis.clients.jedis.exceptions.JedisMovedDataException: MOVED 979 XXX.XX.XXX.XXX:7XX1


搜索一下由文章http://blog.csdn.net/chenyuangege/article/details/51519370中描述的缘故,要用JedisCluster 代替ShardedJedis,由于项目是用springboot,所以专门去找了springboot配置rediscluster的方法。

再次搜索找到一个解决方案http://www.cnblogs.com/m4tech/p/6610144.html,可惜要自己写JedisCluster的实例化@Bean方法,我不喜欢这个解决方案,因为在springboot的配置方案中肯定有默认的JedisCluster实例化方法,只需要设置相关属性即可,于是我开始自己摸索着配置起来了。

可惜spring的官网没有提供好的页面方法,因此只有自己查看spring-redis的源代码找答案

找到org.springframework.data.redis.connection.jedis.JedisConnectionFactory类,在springboot官网给出代码中,默认会装配的redisconnectionfactory为该类:


看见JedisConnectionFactory类中有cluster属性和sentinel属性,就是redis的集群配置属性和哨兵配置属性


由此可以断定springboot中默认的配置属性一定能支持redisclusterconnection的初始化而不需要去自己写jediscluster实例的初始化

找到org.springframework.boot.autoconfigure.data.redis.RedisProperties,该类含有@ConfigurationProperties标注,redis的cluster就是在这里设置:


找到cluster属性和sentinel属性,发现可以设置,于是将之前springboot中关于redis的设置修改了一番


改前的springboot配置:


改后配置


再次运行报错,提示没有认证信息


spring的源码中的提示真是坑爹,password是无论集群还是单机都要输入的于是继续修改


再次修改配置文件


可以正常启动,但是redis读取的时候又会报错


由此得知,使用了cluster的配置,但是产生的connection又是ShardedJedis,这就非常奇怪了,继续阅读源码才发现这些代码:在org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration中的createJedisConnectionFactory()方法中首先会调用getSentinelConfig(),然后才会调用getClusterConfiguration()方法,就是说springboot中配置的哨兵服务会优先集群方式返回一个ShardedJedis:


看完这个代码,就知道如何修改springboot的配置信息,只要把sentinel的配置注释掉就可以了如下:


至此springboot正常运行rediscluster

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在进行Spring Boot项目开发时,我们常常需要使用Redis作为缓存服务,而Redis集群则是为了满足高可用性和可扩展性而设计的。本文以Spring Boot2.0为例,介绍如何配置Redis集群。 一、引入redisson和lettuce连接池 在pom.xml文件中,我们需要引入redisson和lettuce连接池两个依赖: ``` <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.11.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 二、配置Redis集群 在application.yml中,添加Redis集群配置: ``` spring: redis: cluster: nodes: redis://localhost:7000,redis://localhost:7001,redis://localhost:7002 # Redis集群节点 ``` 三、配置Redis连接池 在application.yml中,添加Redis连接池配置: ``` spring: redis: timeout: 2000 # 连接超时时间 lettuce: pool: max-active: 8 # 最大连接数 max-idle: 8 # 最大空闲连接数 min-idle: 0 # 最小空闲连接数 ``` 四、配置RedisTemplate 在application.java中,添加RedisTemplate的Bean: ``` @Bean public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setDefaultSerializer(new StringRedisSerializer()); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } ``` 五、测试Redis集群 在Controller中注入RedisTemplate,执行set和get操作进行测试。 ``` @Autowired private RedisTemplate<String, Object> redisTemplate; @RequestMapping("/set") public String set(String key, String value) { redisTemplate.opsForValue().set(key, value); return "set success"; } @RequestMapping("/get") public Object get(String key) { return redisTemplate.opsForValue().get(key); } ``` 以上是关于如何在Spring Boot项目中配置Redis集群的方法。如果你的系统数据量较大,且并发量较高,那么Redis集群将是你应该考虑的一种选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值