windows下最完整的springboot整合redis哨兵模式

windows下最完整的springboot整合redis哨兵模式

因为在自己学习redis的时候,有密码配置redis哨兵模式出现了很多状况,就当练练手,记录一下此次的经历,redis我就不介绍了,直接进入主题:

(一)我先说下思路

①:配置redis配置文件、哨兵文件
②:在springboot中配置依赖、yml文件
③:测试缓存功能及其存储功能。
④:测试主机宕机下的风险转移

(二)正式写啦!

(1)redis配置文件介绍:

我使用redis的一主二从三哨兵模式来搭配此次的博文。
1)主redis文件:
我这里关闭了安全模式、绑定以及添加了密码

//redis.windows6379.conf文件(原安装路径下redis.windows.conf文件)

#给主库设置密码
requirepass 123456
#这个只是我们初始设定的主库,但实际哨兵模式开启的时候,主库可能变成从库,这时候这句就是配置连接另一台主库(原从库的)密码
masterauth 123456
# 绑定ip,只能接收这个ip地址的请求,所以此处我选择注释掉。
# bind 127.0.0.1
# 保护模式,不关掉可能造成ip链接失败、哨兵链接失败等问题
protected-mode no
#设置主库的端口号
port 6379
#配置日志文件输出位置,你启动的时候,cmd窗口就没有输出啦,需要到这个文件看
logfile "log6379.log"
#为了避免跟后来的从库冲突,rdb、aof等文件一律改成这个文件名字格式,格式你们自己挑
dbfilename dump6379.rdb
#开启aof(自己百度aof是什么)
appendonly yes
#跟rdb文件一样,aof文件也要改名字
appendfilename "appendonly6379.aof"

2)从库文件
我命名为:
redis.windows6380.conf
redis.windows6381.conf
把上面的主库文件复制一遍,改6379成638X就好了。比如:

//redis.windows6380.conf文件(原安装路径下redis.windows.conf文件)
#在从库额外添加这条,表示一开启服务就会变成主库的仆从
slaveof 127.0.0.1 6379
requirepass 123456
masterauth 123456
# bind 127.0.0.1
protected-mode no
port 6380
logfile "log6380.log"
dbfilename dump6380.rdb
appendonly yes
appendfilename "appendonly6380.aof"

3)哨兵文件配置:
可以在同文件夹下自己新建一个sentinel.conf文件
我自己建为:
sentinel26379.conf
sentinel26380.conf
sentinel26381.conf

#sentinel26379.conf配置
#哨兵模式下的哨兵端口
port 26379  #
#关闭保护模式!注意!!!要是你在redis中的配置文件关闭了保护模式,那你在哨兵模式也要关闭!否则很可能出现哨兵连不上的故障。
protected-mode no
#书写格式:sentinel monitor <哨兵名,自定义> <你要监控的redis所在ip> <n你要监控的redis所在端口> <当有几个哨兵主观认为master下线时切换主从>
sentinel monitor host6379 127.0.0.1 6379 1
#设置哨兵监控redis服务时的密码(原理自己百度,哨兵会每固定时间向redis服务发ping以确认redis服务是否正常开启,我们在上面的redis配置文件配置了密码,这里就要解码了)
sentinel auth-pass host6379 123456

其他配置哨兵会自动生成。
如法炮制sentinel26380.conf、sentinel26381.conf两个文件。但是注意需要把port更改成你的空闲端口,我就改成26380、26381了

注意
1、关于密码:
主、从、哨兵的都要设置密码、连接主机时的给主机的密码、哨兵监控主机时的密码。
2、关于保护模式(我在这里跌倒了好久!!)
关于保护模式的内容自己百度。我想说的是总是会有人因为保护模式导致本地连接、远程连接失败的、这里我们最好在配置文件关了这个。

当然你要开启也是可以的,但是你要 bind 你的ip,这样才可能可以连上去。
具体可以参照这个链接尝试:https://www.jianshu.com/p/fb490a282aba(如有侵权,可联系我删除。感谢!)

(2)编写springboot配置文件

我们使用springboot快速搭建一个环境后在application.yml进行配置(要是没有可以自己建一个,properties的同学也是差不多的配置方法。)

1)导入依赖以及配置yml文件:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- https://mvnrepository.com/artifact/redis.clients/jedis 
关于使用jedis还是lettuce我这里不多说,自行百度哈。
-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.1.0</version>
</dependency>
  redis:
  # jedis连接池
	  jedis:
	      pool:
	        max-wait: 5000
	        max-idle: 5
	        max-active: 20
	        min-idle: 5
#   password: 123456 单机模式下配这个
#   host: 127.0.0.1 单机模式下配这个
#	以下是哨兵模式
    sentinel:
      master: host6379#哨兵名,就是哨兵文件里面自定的那个
      nodes:#哨兵所在ip地址以及端口,因为是本机,就是127.0.0.1了
        - 127.0.0.1:26379
        - 127.0.0.1:26380
        - 127.0.0.1:26381

2)自定义template的序列化器
因为springboot默认是jdk的json序列化器,这里我们换成阿里巴巴的fastjson,方便我们在redis客户端查看以及提高json转换速度,要是你想把代码里的Object换成你自己的实体类都是可以的。这一步可做可不做。

@Configuration
public class Config {
    @Primary//@Autowried默认装配这个
    @Bean
    public RedisTemplate<Object, Object> myRedisTemplate(RedisConnectionFactory redisConnectionFactory){
        System.out.println("调用了这个redistemplate");
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        FastJsonRedisSerializer<Object> objectFastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
        template.setDefaultSerializer(objectFastJsonRedisSerializer);
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

}

(3)测试

@SpringBootTest
class DemoApplicationTests {
    @Autowired
    RedisTemplate<Object, Object> redisTemplate;
    @Test
    void contextLoads2() {
        for (int i = 0; i < 5; i++) {
            redisTemplate.opsForValue().set("hahha"+i, "xixixi");
        }
    }
}

启动测试成功:
先启动服务:
redis-server -》sentinel -》再启动springboot
①:正确加载了自定义template:
在这里插入图片描述②:查看客户端发现成功插入数据:

在这里插入图片描述

(4)测试主机宕机下的风险转移:

先查看主机的角色,可以看到下面连着两个仆从了,在上面的测试也写入成功了:
在这里插入图片描述
开启所有的哨兵可以看见,哨兵之间是否连通,要是没有连通,删掉自动生成的代码,重新启动一遍:
在这里插入图片描述现在!!!我要宕掉6379,关掉就好了!
在这里插入图片描述
接下来我们观察哨兵:
在这里插入图片描述可以看到,选了哨兵进行了投票,6381变成主机,我们再到6381 验证一下:
在这里插入图片描述
没错,6381已经变成主机了,翻身农奴崛起啦!

我们返回查看6381的配置文件:
我们之前在6381配置的slaveof 127.0.0.1 6379被删除,在6388配置的被改为slaveof 127.0.0.1 6381。说明确实动态变换,切换了主从。
在这里插入图片描述要是6379回来了呢?会不会出现双主的情况呢?
重启6379:
一重启刚开始趁哨兵还没监听到6379重启,我们就看6379的地位,这时候还是master的:
在这里插入图片描述
但是后来哨兵监听到了:
在这里插入图片描述原主机的地位就从主人变成仆从了,但是看6379配置文件中并没有显示书写了slaveof语句:
在这里插入图片描述
备注:
我是在没有关闭防火墙的情况下可以正常本机连接的。想要远程的同学可以试试从配置我在前面强调的保护模式以及bind入手!!以及关闭防火墙喔!

大致就完成啦!有问题的欢迎在评论区讨论相互学习!
觉得写得不错的,谢谢点赞、转发、留言!
想转载的欢迎转载,但是还请标明原出处喔!
我第一次写,有点小紧张嘻嘻嘻!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spring Boot连接Redis哨兵模式,需要进行以下步骤: 1. 添加Redis依赖 在Spring Boot项目的pom.xml文件中添加Redis依赖,例如: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 配置Redis哨兵模式Spring Boot项目的application.properties或application.yml文件中添加Redis哨兵模式的配置,例如: ``` spring.redis.sentinel.master=redisMaster spring.redis.sentinel.nodes=192.168.0.1:26379,192.168.0.2:26379,192.168.0.3:26379 ``` 其中,`spring.redis.sentinel.master`表示Redis哨兵模式中的主节点名称,`spring.redis.sentinel.nodes`表示Redis哨兵模式中所有哨兵节点的地址和端口号。 3. 创建RedisTemplate 在Spring Boot项目中创建RedisTemplate实例,例如: ``` @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } ``` 其中,`RedisConnectionFactory`是Spring Boot自动配置的Redis连接工厂,`StringRedisSerializer`和`GenericJackson2JsonRedisSerializer`是键和值的序列化器,可以根据实际情况进行调整。 4. 使用RedisTemplate 在Spring Boot项目中使用RedisTemplate操作Redis,例如: ``` @Autowired private RedisTemplate<String, Object> redisTemplate; public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object get(String key) { return redisTemplate.opsForValue().get(key); } ``` 以上就是使用Spring Boot连接Redis哨兵模式的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值