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

时间:2024-04-27 08:17:08 编辑: 来源:

端的 pubsub_channels 就會存儲一條數據, pubsub_channels 其實是一個鏈表,key對應channel,value對應客戶端列表,根據key訂閱的頻道,就可以找到訂閱該頻道的所有客戶端。

同時如果客戶端訂閱一個模式 , pubsub_patterns 也會新增一條數據,記錄當前客戶端訂閱的模式, pubsub_patterns 也有自己的數據結構,其中就包含了客戶端以及模式。

當發布者向某個頻道發布消息時,就會遍歷 pubsub_channels 找到訂閱該頻道的客戶端列表,依次向這些客戶端發送消息。

然后遍歷 pubsub_patterns 找到符合當前頻道的模式,同時找到模式對應的客戶端,然后向客戶端發送消息。

雖然Redis提供了發布/訂閱的功能,但是并不完善,導致基本沒有合適的場景能夠使用。

PubSub缺點:

直到Redis5.0出現之后,出現了Stream這種數據結構,才終于完善了Redis的消息機制 。

Stream實際上就是一個消息列表,只是他幾乎實現了消息隊列所需要的所有功能,包括:

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

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

常見操作命令如下表:

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

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

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

《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、復制、集群三個多機功能進行了介紹。第四部分“獨立功能的實現”對Redis中各個相對獨立的功能模塊進行了介紹,涉及發布與訂閱、事務、Lua腳本、排序、二進制位數組、慢查詢日志、監視器等。本書作者專門維護了買粉絲.redisbook.買粉絲網站,提供帶有詳細注釋的Redis源代碼,以及本書相關的更新內容。

作者簡介:

黃健宏 軟件開發者,他喜歡函數式編程,熱愛開源軟件。出于對數據庫的強烈興趣,他開始閱讀和分析 Redis 源代碼,并對 Redis 2.6 和 Redis 3.0 的源代碼進行了詳細注釋。他翻譯并維護著 Redis 中文文檔網站 買粉絲.RedisDoc .買粉絲 ,編寫 了 OORedis 庫。除此之外,他還是《Redis in Action》一書的譯者。

作者的豆瓣主頁:douban.買粉絲/people/i_m_huangz/

redis怎么做消息隊列?

基于Redis消息隊列-實現短信服務化

1.Redis實現消息隊列原理,常用的消息隊列有RabbitMQ,ActiveMQ,個人覺得這種消息隊列太大太重,本文介紹下基于Redis的輕量級消息隊列服務。 一般來說,消息隊列有兩種模式,一種是發布者訂閱模式,另外一種是生產者和消費者模式。Redis的消息隊列,也是基于這2種原理的實現。 發布者和訂閱者模式:發布者發送消息到隊列,每個訂閱者都能收到一樣的消息。 生產者和消費者模式:生產者將消息放入隊列,多個消費者共同監聽,誰先搶到資源,誰就從隊列中取走消息去處理。注意,每個消息只能最多被一個消費者接收。

搜索关键词: