zoukankan      html  css  js  c++  java
  • Spring Boot 如何快速集成 Redis 哨兵?

    上一篇:Spring Boot 如何快速集成 Redis?

    前面的分享栈长介绍了如何使用 Spring Boot 快速集成 Redis,上一篇是单机版,也有粉丝留言说有没有 Redis Sentinel 的集成教程,这篇开搞!

    Redis Sentinel 介绍

    Redis Sentinel:哨兵,放哨,看中文名字就知道它是一种 Redis 高可用解决方案,主要是针对 Redis 主从模式实现主从节点监控、故障自动切换。

    没有 Redis Sentinel 架构之前,如果主节点挂了,需要运维人员手动进行主从切换,然后更新所有用到的 Redis IP 地址参数再重新启动系统,所有恢复操作都需要人为干预,如果半夜挂了,如果系统很多,如果某个操作搞错了,等等,这对运维人员来说简直就是恶梦。

    有了 Redis Sentinel,主从节点故障都是自动化切换,应用程序参数什么也不用改,对于客户端来说都是透明无缝切换的,运维人员再也不用担惊受怕了。

    如一个 1 主 3 从的 Redis 架构如下:

    加入 Redis 哨兵之后的架构如下:

    为了保证 Redis Sentinel 架构自身的高可用性,自身也不能有单点,一般也要由 3 个或以上 Sentinel 节点组成,一起负责监控主从节点,当大部分 Sentinel 节点认为主节点不可用时,会选一个 Sentinel 节点进行故障切换。

    哨后架构的搭建这里不展开了,大家可以移步公众号Java技术栈,关于 Redis 单机、哨后、集群的搭建、以及往期 Redis 和 Spring Boot 集成、分布式锁实战教程等在公众号Java技术栈后台回复redis进行翻阅。

    Spring Boot & Redis Sentinel 实战

    搞懂了 Redis 哨兵的用处之后,再来看一下 Spring Boot 如何快速集成 Redis Sentinel。

    要知道如何自动配置 Redis Sentinel,除了看官方教程(不一定详细),最好的方式就是看源码了。

    看过上篇的都知道 Spring Boot Redis 的默认客户端是:Lettuce,我们再来看下 LettuceConnectionFactory 的自动配置源码:

    org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration

    如源码所示,我们可以知道 Redis 连接自动配置的优先顺序是:

    Redis Sentinel(哨兵) > Redis Cluster(集群) > Standalone(单机)

    哨兵模式优先极是最高的,再来看下 getSentinelConfig 方法源码:

    master、sentinels 是必须参数,password、SentinelPassword 是可选的,database 默认是第 0 个数据库。

    配置参数源码:

    org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel

    所以,我们只需要提供 Redis Sentinel 的基本配置参数即可。

    application.yml 配置如下:

    # 关注公众号Java技术栈看更多
    spring:
      profiles:
        active: sentinel
    
    ---
    spring:
      profiles: standalone
      redis:
        host: 192.168.1.110
        port: 6379
        password: redis2020
        database: 1
    
    ---
    spring:
      profiles: sentinel
      redis:
        password: redis2020
        sentinel:
          master: mymaster
          nodes:
            - 192.168.1.110:26379
            - 192.168.1.111:26379
            - 192.168.1.112:26379
    

    这样就能在单机和哨兵模式下切换,这是 yaml 配置的优势,一个文件搞定多套环境配置,不熟悉的关注公众号Java技术栈阅读我写的 Spring Boot 系列文章,当然这里配置两套只是为了测试,实际项目这样做没有意义。

    配置成功后,该怎么使用还是怎么使用了,Redis Sentinel 对于客户端来说是透明的。

    最近,如果觉得有收获,欢迎在看、转发。

    推荐去我的博客阅读更多:

    1.Java JVM、集合、多线程、新特性系列教程

    2.Spring MVC、Spring Boot、Spring Cloud 系列教程

    3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

    4.Java、后端、架构、阿里巴巴等大厂最新面试题

    觉得不错,别忘了点赞+转发哦!

  • 相关阅读:
    一些文件的扩展名
    关于git,从svn转到git
    trousers--------dpkg: 处理软件包 trousers (--configure)时报错
    Ubuntu下运行DrClient以上网
    Ubuntu下的终端命令--复制文件从一个文件夹到另一个文件夹下
    VSCode放大字体的快捷键
    opessl版本过低造成的函数使用错误
    python的基本语法
    ubuntu和windows的解码方式
    ubuntu下强制删除文件夹
  • 原文地址:https://www.cnblogs.com/javastack/p/13601293.html
Copyright © 2011-2022 走看看