Springboot集成Redis的哨兵集群(实现读写分离)

 PS: 分享一下Springboot项目怎么连接Redis哨兵集群,实现Redis的读写分离。

一、前言

   1.Redis的哨兵集群搭建成功, 便可自动完成故障的自动转移, 但是SpringBoot项目集成Redis的时候,怎么做到读写分离呢。

   2.还是上次搭建的环境,把上次搭建的集群信息直接粘贴过来。

a1950017c0b44ce2850e5db3e430d30d.png

二、SpringBoot的项目集成Redis

  2.1 新建一个SpringBoot项目,引入我们需要的Redis的依赖

#引入Redis的pom依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <version>2.3.5.RELEASE</version>
</dependency>
        

2.2 完成aplication.yml的配置

#yml中的Redis信息配置, 这里无需关心Redis的节点信息,只需要知道主节点的名称(mymaster)和哨兵的信息
#如果Redis设置了密码,需要配置。
spring
  redis:
    sentinel:
      master: mymaster
      nodes:
        - 192.168.195.59:26379
        - 192.168.195.60:26379
        - 192.168.195.61:26379
    database: 0
    password: Test2024


#配置一下 io.lettuce.core 包的日志级别, 待会方便查询关于Redis的日志
logging:
  level:
    io.lettuce.core: debug

 

2.3 配置读写分离的Bean,实现主写从读策略

    这里再配置类或启动类中注册一个  LettuceClientConfigurationBuilderCustomizer, 这样一个Bean。

@Bean
public LettuceClientConfigurationBuilderCustomizer lettuceclientConfigurationBuilderCustomizer(){
   return new LettuceClientConfigurationBuilderCustomizer() {
    @Override
    public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) {
                clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
            }
        };
}

PS:  这里的ReadFrom是配置Redis的读取策略,是一个枚举,包括下面选择:
     MASTER: 从主节点读取
     MASTER_PREFERRED: 优先从master节点读取,master不可用才读取replica
     REPLICA: 从slave(replica)节点读取
     REPLICA_PREFERRED: 优先从slave(replica)节点读取,所有的slave都不可用才读取master

还有其他的一些枚举值,可自行了解。

 

2.4 定义接口进行验证读写分离

  定义两个简单的测试接口, 读取key和设置key-value的两个web接口。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RedisSentinelController {

   
    @Autowired
    StringRedisTemplate redisTemplate;

    //读取key
    @GetMapping("/get/{keyName}")
    public String getKey(@PathVariable String keyName){
        return redisTemplate.opsForValue().get(keyName);
    }
 

    //设置key-value
    @GetMapping("/set/{keyName}/{value}")
    public String setKey(@PathVariable String keyName, @PathVariable String value){
        redisTemplate.opsForValue().set(keyName,value);
        return "set key success";
    }


}

 

      1 调用查询接口,并查看控制台输出的日志信息 , 可以看出最终是由192.168.195.61这个从节点的Redis执行了一个查询操作。

6e50f4a3ea8f418a95b924103a24ff97.png

   

      2 调用设置key的接口,查看控制台输出的信息,  可以看出是由192.168.195.59主节点的Redis

执行了一个写操作。

26cabe710e4949dabbb5b79a736ed346.png

 

  到此基本上的测试已经结束了,  使用简单的Demo实现哨兵集群的读写分离。

  PS: 这里有空的话可以自行模拟故障转移,测试项目的读写分离还是否能保持正常, 实测是没用问题的奥。

三、总结

       通过Spring Boot集成Redis哨兵模式,我们可以轻松实现读写分离的功能,从而提高系统的性能和可靠性。通过利用Redis的主从复制和自动故障转移功能,我们可以确保系统在主服务器故障时能够自动切换到备用服务器,并且可以实现读写操作的负载均衡,从而更好地满足用户的需求。

 

PS: 之前有写过关于哨兵集群搭建的文章,欢迎前去阅读Redis的哨兵集群(一主两从三哨兵、部署教程和知识总结)-CSDN博客

PS: 收藏起来,忘了再继续学习, 后面继续分享一些没用的知识

 

  • 29
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值