1. 程式人生 > >Spring Boot 如何快速整合 Redis 哨兵?

Spring Boot 如何快速整合 Redis 哨兵?

上一篇:[Spring Boot 如何快速整合 Redis?](https://mp.weixin.qq.com/s/08mLERyhtS3fWZaWhhqaQw) 前面的分享棧長介紹瞭如何使用 Spring Boot 快速整合 Redis,上一篇是單機版,也有粉絲留言說有沒有 Redis Sentinel 的整合教程,這篇開搞! ## Redis Sentinel 介紹 Redis Sentinel:哨兵,放哨,看中文名字就知道它是一種 Redis 高可用解決方案,主要是針對 Redis 主從模式實現主從節點監控、故障自動切換。 沒有 Redis Sentinel 架構之前,如果主節點掛了,需要運維人員手動進行主從切換,然後更新所有用到的 Redis IP 地址引數再重新啟動系統,所有恢復操作都需要人為干預,如果半夜掛了,如果系統很多,如果某個操作搞錯了,等等,這對運維人員來說簡直就是惡夢。 有了 Redis Sentinel,主從節點故障都是自動化切換,應用程式引數什麼也不用改,對於客戶端來說都是透明無縫切換的,運維人員再也不用擔驚受怕了。 如一個 1 主 3 從的 Redis 架構如下: ![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200902135125854-869020623.png) 加入 Redis 哨兵之後的架構如下: ![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200902135126568-806604978.png) 為了保證 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 ![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200902135127141-342106968.png) 如原始碼所示,我們可以知道 Redis 連線自動配置的優先順序是: > Redis Sentinel(哨兵) > Redis Cluster(叢集) > Standalone(單機) 哨兵模式優先極是最高的,再來看下 getSentinelConfig 方法原始碼: ![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200902135127565-650159853.png) master、sentinels 是必須引數,password、SentinelPassword 是可選的,database 預設是第 0 個數據庫。 配置引數原始碼: > org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel ![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200902135128133-799804036.png) 所以,我們只需要提供 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、集合、多執行緒、新特性系列教程](http://www.javastack.cn/categories/Java/) 2.[Spring MVC、Spring Boot、Spring Cloud 系列教程](http://www.javastack.cn/categories/Spring/) 3.[Maven、Git、Eclipse、Intellij IDEA 系列工具教程](http://www.javastack.cn/categories/工具/) 4.[Java、後端、架構、阿里巴巴等大廠最新面試題](http://www.javastack.cn/categories/面試題/) 覺得不錯,別忘了點贊+轉