Redis(50) Redis哨兵如何與客戶端進行交互?

Redis 哨兵(Sentinel)不僅負責監控和管理 Redis 主從復制集群的高可用性,還需要與客戶端進行有效的交互來實現故障轉移后的透明連接切換。下面詳細探討 Redis 哨兵如何與客戶端進行交互,并結合代碼示例加以說明。

哨兵與客戶端的交互

Redis 哨兵與客戶端的交互主要包括以下幾個方面:

  1. 發現主節點

    • 客戶端可以連接到哨兵,并通過哨兵來獲取當前的主節點信息。哨兵會提供一個指向當前活躍主節點的地址。
  2. 監聽主節點變化

    • 客戶端可以訂閱哨兵的事件,及時獲知主節點的變化,從而重新連接到新的主節點。
  3. 自動重連

    • 客戶端庫如 Jedis、Lettuce 可以配置為自動處理從哨兵獲取主節點信息,并在主節點故障轉移時自動重新連接到新的主節點。

詳細代碼示例

以下是一個具體的代碼示例,展示了如何配置和使用 Redis 哨兵與客戶端進行交互。

哨兵配置 (sentinel.conf)
port 26379
dir /tmp# 監控主節點
sentinel monitor mymaster 127.0.0.1 6379 2# 主節點不可用時間(毫秒)
sentinel down-after-milliseconds mymaster 5000# 同步從節點的數量
sentinel parallel-syncs mymaster 1# 故障轉移超時時間(毫秒)
sentinel failover-timeout mymaster 60000# 通知腳本
sentinel client-reconfig-script mymaster /path/to/notification/script.sh

啟動哨兵:

redis-sentinel sentinel.conf
Java 客戶端示例

使用 Jedis 庫連接 Redis 哨兵集群,并進行簡單的 Redis 操作。

引入 Jedis 庫

在 Maven 項目中添加 Jedis 依賴:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.0.1</version>
</dependency>
Java 代碼示例

以下 Java 代碼展示了如何使用 Jedis 庫連接和操作帶有 Sentinel 的 Redis 集群,并自動處理主節點故障轉移。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;import java.util.HashSet;
import java.util.Set;public class RedisSentinelExample {private static final String MASTER_NAME = "mymaster";public static void main(String[] args) {// 定義 Sentinel 節點Set<String> sentinels = new HashSet<>();sentinels.add("127.0.0.1:26379");// 創建 JedisPoolConfig 對象JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(10);poolConfig.setMaxIdle(5);poolConfig.setMinIdle(1);// 創建 JedisSentinelPool 對象try (JedisSentinelPool sentinelPool = new JedisSentinelPool(MASTER_NAME, sentinels, poolConfig);Jedis jedis = sentinelPool.getResource()) {// 執行 Redis 操作jedis.set("mykey", "myvalue");String value = jedis.get("mykey");System.out.println("mykey: " + value);// 輸出連接的主節點信息System.out.println("Connected to master: " + jedis.getClient().getHost() + ":" + jedis.getClient().getPort());// 模擬主節點故障后,JedisSentinelPool 會自動連接到新的主節點// 可以手動殺死主節點進程來測試} catch (Exception e) {System.err.println("Error: " + e.getMessage());}}
}
Python 客戶端示例

使用 redis-py 庫連接 Redis 哨兵集群,進行簡單的 Redis 操作。

引入 redis-py

在 Python 環境中安裝 redis-py 庫:

pip install redis
Python 代碼示例

以下 Python 代碼展示了如何使用 redis-py 庫連接和操作帶有 Sentinel 的 Redis 集群,并自動處理主節點故障轉移。

import redis
from redis.sentinel import Sentineldef main():# 定義 Sentinel 節點sentinel = Sentinel([('127.0.0.1', 26379)], socket_timeout=0.1)# 獲取主節點master = sentinel.master_for('mymaster', socket_timeout=0.1)slave = sentinel.slave_for('mymaster', socket_timeout=0.1)# 執行 Redis 操作master.set('mykey', 'myvalue')value = slave.get('mykey')print('mykey:', value.decode('utf-8'))# 輸出連接的主節點信息print('Connected to master:', master.connection_pool.get_master_address())# 模擬主節點故障后,Sentinel 會自動連接到新的主節點# 可以手動殺死主節點進程來測試if __name__ == '__main__':main()

總結

Redis 哨兵通過與客戶端交互,確保在主節點發生故障后能夠及時獲取新的主節點信息并自動重新連接。客戶端通過連接哨兵獲取主節點信息、監聽主節點變化、自動重新連接等機制,實現對 Redis 集群的透明訪問。合理配置和使用哨兵與客戶端的交互機制,可以顯著提高 Redis 集群的高可用性和可靠性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96061.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【.Net技術棧梳理】04-核心框架與運行時(線程處理)

文章目錄1. 線程管理1.1 線程的核心概念&#xff1a;System.Threading.Thread1.2 現代線程管理&#xff1a;System.Threading.Tasks.Task 和 Task Parallel Library (TPL)1.3 狀態管理和異常處理1.4 協調任務&#xff1a;async/await 模式2. 線程間通信2.1 共享內存與競態條件2…

(JVM)四種垃圾回收算法

在 JVM 中&#xff0c;垃圾回收&#xff08;GC&#xff09;是核心機制之一。為了提升性能與內存利用率&#xff0c;JVM 采用了多種垃圾回收算法。本文總結了 四種常見的 GC 算法&#xff0c;并結合其優缺點與應用場景進行說明。1. 標記-清除&#xff08;Mark-Sweep&#xff09;…

論文閱讀:VGGT Visual Geometry Grounded Transformer

論文閱讀&#xff1a;VGGT: Visual Geometry Grounded Transformer 今天介紹一篇 CVPR 2025 的 best paper&#xff0c;這篇文章是牛津大學的 VGG 團隊的工作&#xff0c;主要圍繞著 3D 視覺中的各種任務&#xff0c;這篇文章提出了一種多任務統一的架構&#xff0c;實現一次輸…

python編程:一文掌握pypiserver的詳細使用

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 一、 pypiserver 概述 1.1 pypiserver是什么? 1.2 核心特性 1.3 典型應用場景 1.4 pypiserver優缺點 二、 安裝與基本使用 2.1 安裝 pypiserver 2.2 快速啟動(最簡模式) 2.3 使用私有服務器安裝包 2.4 向私有服務…

Git reset 回退版本

- 第 121 篇 - Date: 2025 - 09 - 06 Author: 鄭龍浩&#xff08;仟墨&#xff09; 文章目錄Git reset 回退版本1 介紹三種命令區別3 驗證三種的區別3 如果不小心git reset --hard將「工作區」和「暫存區」中的內容刪除&#xff0c;剛才的記錄找不到了&#xff0c;怎么辦呢&…

ARM 基礎(2)

ARM內核工作模式及其切換條件用戶模式(User Mode, usr) 權限最低&#xff0c;運行普通應用程序。只能通過異常被動切換到其他模式。快速中斷模式(FIQ Mode, fiq) 處理高速外設中斷&#xff0c;專用寄存器減少上下文保存時間&#xff0c;響應周期約4個時鐘周期。觸發條件為FIQ中…

Flutter 性能優化

Flutter 性能優化是一個系統性的工程&#xff0c;涉及多個層面。 一、性能分析工具&#xff08;Profiling Tools&#xff09; 在開始優化前&#xff0c;必須使用工具定位瓶頸。切忌盲目優化。 1. DevTools 性能視圖 DevTools 性能視圖 (Performance View) 作用&#xff1a;…

Spring事件監聽機制(三)

為了理解EvenListener注解的底層原理&#xff0c;我們可以自己實現一個類似的注解模擬實現。1.定義MyListener注解Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)public interface MyListener {}2.注解使用Componentstatic class SmsService {private static…

基于Springboot + vue3實現的小區物業管理系統

項目描述本系統包含管理員和用戶兩個角色。管理員角色&#xff1a;用戶管理&#xff1a;管理系統中所有用戶的信息&#xff0c;包括添加、刪除和修改用戶。房屋信息管理&#xff1a;管理房屋信息&#xff0c;包括新增、查看、修改和刪除房屋信息。車輛信息管理&#xff1a;管理…

交叉熵和KL散度

這個問題之前我也是傻傻分不清&#xff0c;決定整理一下&#xff0c;用更印象深刻的方式讓人記住。核心聯系&#xff1a;交叉熵 KL 散度 真實分布的熵 交叉熵作為 “絕對” 度量&#xff0c;會綜合真實分布的熵&#xff08;固有難度&#xff09;與預測誤差&#xff0c;直接體…

HTML 各種事件的使用說明書

HTML 各種事件的使用說明書 1. HTML 事件簡介 HTML事件是瀏覽器或用戶在網頁上執行的動作或發生的事情。當這些事件發生時&#xff0c;可以通過JavaScript來響應和處理這些事件&#xff0c;從而實現網頁的交互功能。事件處理是Web前端開發中實現動態交互的核心機制。 基本概…

Kafka面試精講 Day 10:事務機制與冪等性保證

【Kafka面試精講 Day 10】事務機制與冪等性保證 在分布式消息系統中&#xff0c;如何確保消息不丟失、不重復&#xff0c;是系統可靠性的核心挑戰。Kafka自0.11版本起引入了冪等性Producer和事務性消息機制&#xff0c;徹底解決了“至少一次”語義下可能產生的重復消息問題&am…

時序數據庫簡介和安裝

一、簡介1. 什么是時序數據庫&#xff1f;時序數據庫是專門用于存儲和處理時間序列數據的數據庫系統。時間序列數據是指按時間順序索引的一系列數據點。每個數據點都包含&#xff1a;一個時間戳&#xff1a;記錄數據產生的時間。一個或多個指標值&#xff1a;例如溫度、濕度、C…

comfyUI 暴露網絡restful http接口

https://zhuanlan.zhihu.com/p/686893291 暴露websocket接口。 打開開發者選項 如圖

linux系統address already in use問題解決

linux系統上某個端口被占用&#xff0c;如何解決&#xff1f;1.找到占用的進程編號&#xff1a;netstat -tulnp | grep :80002.強制殺死該進程kill -9 80603其他說明&#xff1a;1.查找占用端口的進程&#xff0c;可以用&#xff1a;lsof -i :8001 # 或者使用 netstat -tulnp |…

基于SpringBoot的家政保潔預約系統【計算機畢業設計選題 計算機畢業設計項目 計算機畢業論文題目推薦】

&#x1f34a;作者&#xff1a;計算機編程-吉哥 &#x1f34a;簡介&#xff1a;專業從事JavaWeb程序開發&#xff0c;微信小程序開發&#xff0c;定制化項目、 源碼、代碼講解、文檔撰寫、ppt制作。做自己喜歡的事&#xff0c;生活就是快樂的。 &#x1f34a;心愿&#xff1a;點…

【Linux系統】 4. 權限(一)

一. shell 命令及運行原理基本理解1&#xff09;廣義理解的操作系統包括&#xff1a;操作系統內核、外殼程序&#xff08;shell命令行、圖形化界面&#xff09;、必要的軟件。2&#xff09;狹義的操作系統&#xff1a;操作系統內核。3&#xff09;在用戶和內核之間有一個外殼程…

6.python——字符串

python中用’ 和" "創建字符串 python的子字符串截取用[]取字符串拼接可以直接用相加。 python三引號允許一個字符串跨多行&#xff0c;其中無需進行轉義&#xff08;所見即所得&#xff09;。 當你需要一塊HTML或者SQL時&#xff0c;這時用字符串組合&#xff0c;特…

足球數據API接口的技術特性與應用價值分析

一、接口概述現代足球數據接口是基于RESTful架構的數據服務&#xff0c;通過標準化方式提供賽事相關信息。這類接口通常采用JSON格式傳輸數據&#xff0c;支持跨平臺調用&#xff0c;為開發者提供結構化的足球賽事數據。二、數據覆蓋范圍主流足球數據接口通常包含以下數據類型&…

<android>反編譯魔改安卓系統應用并替換

我們知道安卓系統基于穩定性、維護便利、性能優化等原因并未對原生系統apk進行混淆加密處理&#xff0c;由此就方便了我們反編譯替換原生應用。 首先我們設備需要是root后的&#xff0c;我是使用的是小米5&#xff0c;刷的24.3版本的面具。首先我們需要取系統apk&#xff0c;這…