您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

02 redis的發布訂閱機制(spring-redis 發布訂閱模式:發布一條消息收到了兩條,重復監聽)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-04-27 13:15:50【】6人已围观

简介實現了消息隊列所需要的所有功能,包括:同時需要注意的是Stream只是一個數據結構,他不會主動把消息推送給消費者,需要消費者主動來消費數據。每個Stream都有唯一的名稱,它就是Redis的key,首

實現了消息隊列所需要的所有功能,包括:

同時需要注意的是Stream只是一個數據結構,他不會主動把消息推送給消費者,需要消費者主動來消費數據 。

每個Stream都有唯一的名稱,它就是Redis的key,首次使用 xadd 指令追加消息時自動創建。

常見操作命令如下表:

如果客戶端希望知道自身消費到第幾條數據了,那么就需要記錄一下當前消費的消息ID,下次再次消費的時候就從上次消費的消息ID開始讀取數據即可。

消費組中多了一個游標 last_delivered_id ,表示當前消費到了哪一條數據。同時所有的數據都是待處理消息( PEL ),只有消費者處理完畢之后使用 ack 指令告知redis服務器,數據才會從 PEL 中移除,確認后的消息就無法再次消費。

如果接收到的消息比較多,為了避免Stream過長,可以選擇指定Stream的最大長度,一旦到達了最大長度,就會從最早的消息開始清除,保證Stream中最新的消息。

redis頻道收到發布者信息后可以只推信息給一個訂閱者嗎

Redis 的 SUBSCRIBE 命令可以讓客戶端訂閱任意數量的頻道, 每當有新信息發送到被訂閱的頻道時, 信息就會被發送給所有訂閱指定頻道的客戶端。

作為例子, 下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關系:

Redis哨兵機制原理淺析

上一篇文章Redis主從復制原理中簡要地說明了主從復制的一個基本原理,包含全量復制、復制積壓緩沖區與增量復制等內容,有興趣的同學可以先看下。

利用主從復制,可以實現讀寫分離、數據備份等功能。但如果主庫宕機后,需要運維人員手動地將一個從庫提升為新主庫,并將其他從庫slaveof新主庫,以此來實現故障恢復。

因此, 主從模式的一個缺點,就在于無法實現自動化地故障恢復 。Redis后來引入了哨兵機制,哨兵機制大大提升了系統的高可用性。

哨兵,就是站崗放哨的,時刻監控周圍的一舉一動,在第一時間發現敵情并發出及時的警報。

Redis中的哨兵(Sentinel), 則是一個特殊的Redis實例 ,不過它并不存儲數據。也就是說,哨兵在啟動時,不會去加載RDB文件。

關于Redis的持久化,可以參考我的另外一篇文章 談談Redis的持久化——AOF日志與RDB快照

上圖就是一個典型的哨兵架構,由數據節點與哨兵節點構成,通常會部署多個哨兵節點。

哨兵主要具有三個作用, 監控、選主與通知 。

監控:哨兵會利用心跳機制,周期性不斷地檢測主庫與從庫的存活性

選主:哨兵檢測到主庫宕機后,選擇一個從庫將之切換為新主庫

通知:哨兵會將新主庫的地址通知到所有從庫,使得所有從庫與舊主庫slaveof新主庫,也會將新主庫的地址通知到客戶端上

我會在下文詳細講一下監控與選主的過程

哨兵系統是通過3個定時任務,來完成對主庫、從庫與哨兵之間的探活。

首先我們會在配置文件中配置主庫地址,這樣哨兵在啟動后,會以 每隔10秒 的頻率向主庫發送info命令,從而獲得當前的主從拓撲關系,這樣就拿到了所有從庫的地址。

接著 每隔2秒 ,會使用pub/sub(發布訂閱)機制,在主庫上的 sentinel :hello的頻道上發布消息,消息內容包括哨兵自己的ip、port、runid與主庫的配置。

每個哨兵都會訂閱該頻道,在該頻道上發布與消費消息,從而實現哨兵之間的互相感知。

利用啟動配置與info命令可以獲取到主從庫地址,利用發布訂閱可以感知到其余的哨兵節點。

在此基礎上,哨兵會 每隔1秒 向主庫、從庫與其他哨兵節點發送PING命令,因此來進行互相探活。

當某個哨兵在 **down-after-millise買粉絲nds(默認是30秒) **配置的連續時間內,仍然沒有收到主庫的正確響應,則當前哨兵會認為主庫 主觀下線 ,并將其標記為sdown(subjective down)

為了避免當前哨兵對主庫的誤判,因此這個時候還需要參考其他哨兵的意見。

接著當前哨兵會向其他哨兵發送 sentinel is-master-down-by-addr 命令, 如果有半數以上(由quorum參數決定)的哨兵認為主庫確實處于主觀下線狀態,則當前哨兵認為主庫客觀下線 ,標記為odown(objective down)

一旦某個主庫被認定為客觀下線時,這個時候需要進行哨兵選舉,選舉出一個領導者哨兵,來完成主從切換的過程。

哨兵A在向其他哨兵發送 sentinel is-master-down-by-addr 命令時,同時要求其他哨兵同意將其設置為Leader,也就是想獲得其他哨兵的投票。

在每一輪選舉中,每個哨兵僅有一票。投票遵循先來先到的原則,如果某個哨兵沒有投給別人,就會投給哨兵A。

首先獲得半數以上投票的哨兵,將被選舉稱為Leader。

這里的哨兵選舉,采用的是Raft算法。這里不對Raft做詳細的探討,有興趣的同學,可以參考我的另外一篇文章 22張圖,帶你入門分布式一致性算法Raft

該文章采用大量的圖例,相信你可以從中學習到全新的知識,從而打開分布式一致性算法的大門,大伙們記得等我搞完Paxos與Zab。

過半投票機制也常用于很多算法中,例如RedLock,在半數以上的節點上加鎖成功,才代表申請到了分布式鎖,具體可參考這篇文章的最后 我用了上萬字,走了一遍Redis實現分布式鎖的坎坷之路,從單機到主從再到多實例,原來會發生這么多的問題

在Zookeeper選舉中,同樣也用到了過半投票機制,在這篇文章中 面試官:能給我畫個Zookeeper選舉的圖嗎? 我從源碼角度分析了Zookeeper選舉的過程。

在選舉到領導者哨兵后,將由該哨兵完成故障恢復工作。

故障恢復分為以下兩步:

詳細說一下第一步,挑選是有條件的。首先要過濾出不健康的節點,再按某種規則排序,最后取第一個從庫,我們直接從源碼入手:

因此,以下從庫會被過濾出:

剩下的節點,就是健康的節點,此時再執行一次快速排序,排序的規則如下:

本文算是Redis哨兵的一個入門文章,主要講了哨兵的作用,例如監控、選主和通知。

在Redis讀寫分離的情況下,使用哨兵可以很輕松地做到故障恢復,提升了整體的可用性。

但哨兵無法解決Redis單機寫的瓶頸,這就需要引入集群模式,相應的文章也被列為明年的寫作計劃中。

</article>

spring-redis 發布訂閱模式:發布一條消息收到了兩條,重復監聽

當你看到這個文章時,想必已經了解了一些關于spring-redis發布訂閱方面的知識,如果你也遇到同樣的問題

那么請考慮spring在啟動時有沒有重復的加載配置文件

具體的方式可以在 AbstractApplicationContext 的 refresh() 方法中打斷點,如果走了兩次,說明配置文件加載了兩遍

而配置文件加載兩遍的原因是因為web.xml中DispatcherServlet和ContextLoaderLinistener 共用了 某些配置文件導致的。

《Redis設計與實現》pdf下載在線閱讀,求百度網盤云資源

《Redis設計與實現》(黃健宏)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:買粉絲s://pan..買粉絲/s/1M0lgX6oCAbCTQfyVSURJyQ 密碼:g1k5

書名:Redis設計與實現

作者:黃健宏

豆瓣評分:8.6

出版社:機械工業出版社

出版年份:2014-6

頁數:388

內容簡介:

【官方網站】

本書的官方網站 買粉絲.RedisBook.買粉絲 提供了書本試讀、相關源碼下載和勘誤回報等服務,歡迎讀者瀏覽和使用。

【編輯推薦】

系統而全面地描述了 Redis 內部運行機制

圖示豐富,描述清晰,并給出大量參考信息,是NoSQL數據庫開發人員案頭必備

包括大部分Redis單機特征,以及所有多機特性

【讀者評價】

這本書描述的知識點很豐富,覆蓋很全,里面提到特性較多,有不少我們也沒用過 :) 每個命令內部的機制的介紹很不錯,很多估計也是首次有詳細文檔介紹。

——楊衛華(@TimYang)新浪微博技術總監

近幾年Redis以其高性能、高靈活性的優點,變得越來越流行。但很多人在使用Redis時,僅僅還是停留在比較表層的功能性認識,缺乏對內部機制原理的深入理解。本書是huangz同學長期對Redis源碼的閱讀心得結晶,書中對Redis的各個方面都進行了詳細且深入的講解,將復雜的原理用最簡單的方式為大家解構和講解,強烈推薦給每一位Redis的使用者閱讀。

—— iammutex,NoSQLFan站長,樂視網技術經理

Redis 是近些年來特別火爆的 NoSQL 之一。縱觀中外各種書籍還沒有一本能對 Redis 內部進行深入剖析,《Redis 設計與實現》可謂開此先河。常和作者在網上交流,知道作者為這本書付出了大量的心血。這本書行文流暢,思路清晰,詳細地介紹了 Redis 源碼的方方面面。無論是想學習 NoSQL、網絡編程的初學者,還是源碼控的進階者,本書都會有很大的幫助。

—— 阮若夷,支付寶高級專家

【內容簡介】

本書全面而完整地講解了Redis的內部機制與實現方式,對Redis的大多數單機功能以及所有多機功能的實現原理進行了介紹,展示了這些功能的核心數據結構以及關鍵的算法思想,圖示豐富,描述清晰,并給出大量參考信息。通過閱讀本書,讀者可以快速、有效地了解Redis的內部構造以及運作機制,更好、更高效地使用Redis。

本書主要分為四大部分。第一部分“數據結構與對象”介紹了Redis中的各種對象及其數據結構,并說明這些數據結構如何影響對象的功能和性能。第二部分“單機數據庫的實現”對Redis實現單機數據庫的方法進行了介紹,包括數據庫、RDB持久化、AOF持久化、事件等。第三部分“多機數據庫的實現”對Redis的Sentinel、復制、集群三個多機功能進行了介紹。第四部分“獨

很赞哦!(98242)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:黑龙江省大庆林甸县

工作室:小组

Email:[email protected]