redis哨兵整合springboot问题

大家推荐个靠谱的公众号程序员探索之路,大家一起加油 https://i-blog.csdnimg.cn/blog_migrate/93320939ba8f8b0a898e29429753f496.png

整合redis哨兵模式时会遇到几个问题

1.不能连接192.168.199.171:26379地址

2.DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified

也就是不能连接受保护的redis

解决:

1.明明配置的时127.0.0.1:26379怎么会变成192.168.199.171:26379       192.168.199.171貌似时本机ip

那只能说明代码处理了

public static HostAndPort parseString(String from){
  // NOTE: redis answers with
  // '99aa9999aa9a99aa099aaa990aa99a09aa9a9999 9a09:9a9:a090:9a::99a slave 8c88888888cc08088cc8c8c888c88c8888c88cc8 0 1468251272993 37 connected'
  // for CLUSTER NODES, ASK and MOVED scenarios. That's why there is no possibility to parse address in 'correct' way.
  // Redis should switch to 'bracketized' (RFC 3986) IPv6 address.
  try {
    String[] parts = extractParts(from);
    String host = parts[0];
    int port = Integer.valueOf(parts[1]);
    return new HostAndPort(convertHost(host), port);
  } catch (NumberFormatException ex) {
    throw new IllegalArgumentException(ex);
  }
}
public static String convertHost(String host) {
  if (host.equals("127.0.0.1") || host.startsWith("localhost") || host.equals("0.0.0.0") ||
      host.startsWith("169.254") ||
      host.startsWith("::1") || host.startsWith("0:0:0:0:0:0:0:1")) {
    return LOCALHOST_STR;
  } else {
    return host;
  }
}

上面两个方法明显的显示改掉了127.0.0.1  LOCALHOST_STR = 192.168.199.171

2.不能连接受保护的redis 这个问题是由于redis3.2以后的新特性

protected-mode yes  如果这样配置只允许 127.0.0.1 和 localhost访问

测试项目:https://github.com/ZhZGod/redis-study.git

 

<think>好的,用户想在Spring Boot中整合Redis哨兵模式。我需要先回顾一下相关的知识,确保步骤正确。首先,记得Redis哨兵模式是用来实现高可用性的,当主节点故障时,哨兵会自动选举新的主节点。 首先,用户需要添加Redis的依赖。Spring Boot通常使用spring-boot-starter-data-redis,这个依赖包含了Lettuce和Jedis客户端。不过现在默认是Lettuce,如果需要用Jedis的话,可能需要排除Lettuce并引入Jedis的依赖。这点需要确认,但用户的问题可能不需要具体到客户端选择,所以先提基本的依赖。 接下来是配置文件。在application.yml或application.properties中配置Redis哨兵的相关信息。关键的配置项包括哨兵节点的地址、主节点的名称,以及可能的密码和数据库编号。例如,spring.redis.sentinel.master设置主节点名称,spring.redis.sentinel.nodes列出所有哨兵的地址和端口。 然后,可能需要配置Redis连接工厂,比如使用JedisConnectionFactory或者LettuceConnectionFactory,具体取决于使用的客户端。不过Spring Boot可能已经自动配置了这些,用户只需要正确设置属性即可。如果用户需要自定义配置,比如连接池参数,这时候可能需要手动创建配置类。 另外,用户可能需要了解如何测试哨兵配置是否生效。例如,可以编写一个测试用例,尝试连接Redis并执行一些操作,然后模拟主节点故障,看看应用是否能自动切换到新的主节点。不过这可能超出基础整合的范围,属于进阶内容。 还要考虑密码的情况。如果Redis设置了密码,需要在配置中添加spring.redis.password属性。同时,哨兵本身可能有独立的密码,这时候可能需要额外的配置,比如在spring.redis.sentinel.password中设置。这点需要根据Redis的版本和Spring Boot的支持情况来确认,不同版本可能有不同的配置方式。 用户可能还关心如何验证配置是否正确。可以启动应用,查看日志是否有连接哨兵的记录,或者通过健康检查端点/actuator/health查看Redis的状态。另外,使用RedisTemplate进行操作时,如果能够成功读写,说明配置正确。 另外,记得在配置哨兵节点时,每个节点的格式是host:port,多个节点用逗号分隔。例如,spring.redis.sentinel.nodes=sentinel1:26379,sentinel2:26380,sentinel3:26381。 最后,可能还需要提示用户关于版本兼容性的问题,不同版本的Spring Boot对Redis的支持可能有差异,建议查看官方文档或者参考引用的教程视频,比如提到的雷丰阳的课程,确保配置方法与当前使用的Spring Boot版本兼容。 总结步骤应该是:添加依赖→配置哨兵信息→测试连接。过程中要注意配置项的正确性,以及可能需要的客户端选择。如果有高级需求,比如连接池设置或异常处理,可能需要进一步配置。</think>以下是在Spring Boot中整合Redis哨兵模式的实现步骤: ### 1. 添加依赖 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 推荐使用Spring Boot 2.7.x及以上版本,支持更完善的哨兵配置[^2]。 ### 2. 配置哨兵信息 ```yaml spring: redis: password: your-redis-password sentinel: master: mymaster # 主节点名称 nodes: - sentinel1:26379 - sentinel2:26380 - sentinel3:26381 password: sentinel-password # 哨兵服务密码(可选) ``` ### 3. 配置连接工厂 ```java @Configuration public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory( RedisSentinelConfiguration sentinelConfig) { return new JedisConnectionFactory(sentinelConfig); } } ``` ### 4. 使用RedisTemplate ```java @Autowired private RedisTemplate<String, Object> redisTemplate; public void setValue(String key, Object value) { redisTemplate.opsForValue().set(key, value); } ``` ### 关键特性说明: 1. **自动故障转移**:当主节点不可用时,哨兵会自动选举新主节点 2. **读写分离**:通过`@ReadOnly`注解实现只读操作路由到从节点 3. **拓扑刷新**:默认每10秒自动更新节点状态信息[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值