您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
02 redis的發布訂閱 性能(Spring Boot使用Redis進行消息的發布訂閱 原創)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-06-20 06:47:14【】2人已围观
简介Redis中的各種對象及其數據結構,并說明這些數據結構如何影響對象的功能和性能。第二部分“單機數據庫的實現”對Redis實現單機數據庫的方法進行了介紹,包括數據庫、RDB持久化、AOF持久化、事件等。
作者簡介:
黃健宏 軟件開發者,他喜歡函數式編程,熱愛開源軟件。出于對數據庫的強烈興趣,他開始閱讀和分析 Redis 源代碼,并對 Redis 2.6 和 Redis 3.0 的源代碼進行了詳細注釋。他翻譯并維護著 Redis 中文文檔網站 買粉絲.RedisDoc .買粉絲 ,編寫 了 OORedis 庫。除此之外,他還是《Redis in Action》一書的譯者。
作者的豆瓣主頁:douban.買粉絲/people/i_m_huangz/
spring-redis 發布訂閱模式:發布一條消息收到了兩條,重復監聽
當你看到這個文章時,想必已經了解了一些關于spring-redis發布訂閱方面的知識,如果你也遇到同樣的問題
那么請考慮spring在啟動時有沒有重復的加載配置文件
具體的方式可以在 AbstractApplicationContext 的 refresh() 方法中打斷點,如果走了兩次,說明配置文件加載了兩遍
而配置文件加載兩遍的原因是因為web.xml中DispatcherServlet和ContextLoaderLinistener 共用了 某些配置文件導致的。
Redis發布訂閱和Stream
發布訂單系統是日常開發中經常會用到的功能。簡單來說,就是發布者發布消息,訂閱者就會接受到消息并進行相應的處理,如下圖所示。
Redis為我們提供了發布/訂閱的功能模塊PubSub,可以用于消息傳遞。
其中發布者publisher、訂閱者subscriber都是redis客戶端,channel則是redis服務器。
發布者publisher向channel發送消息,訂閱該channel的subscriber就會接收到消息。
發布消息publish
訂閱test1、test2的客戶端會收到消息
按照上述這種方式,如果 訂閱者subscriber想要訂閱多個channel 則需要同時指定多個channel的名稱,redis為了解決這個問題提供 psubscribe模式匹配 這種訂閱方式,可以通過通配符的方式匹配頻道。
發布消息
之前訂閱ch*的客戶端就會收到cha頻道和買粉絲頻道的消息,這樣就一次性訂閱多個頻道
redis服務端存儲了訂閱頻道/模式的客戶端列表
相當于如果客戶端訂閱一個頻道 ,那么服務端的 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性能為什么高
(1)redis是非關系型內存數據庫數據存儲于內存中,內存讀取速度非常快,如果只是簡單的key-value,內存不是瓶頸。一般情況下,hash查找可以達到每秒數百萬次的數量級。
(2)采用單線程,避免了不必要的上下文切換和競爭條件。
(3)內部實現采用epoll,采用了epoll+自己實現的簡單的事件框架。epoll中的讀、寫、關閉、連接都轉化成了事件,然后利用epoll的多路復用特性,絕不在io上浪費一點時間。
擴展閱讀
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。
redis的官網地址,非常好記,是redis.io。(特意查了一下,域名后綴io屬于國家域名,是british Indian Ocean territory,即英屬印度洋領地)。
目前,Vmware在資助著redis項目的開發和維護。
很赞哦!(263)
相关文章
- 04 ebay海外購女鞋(我人在美國能在淘寶買東西嗎)
- 04 買粉絲usin怎么讀發音語音(買粉絲usin怎么讀語音)
- 04 edit a youtube playlist on(好聽的英文歌)
- 04 download youtube to mp3 player apk for android(手機文件哪些可以刪)
- 04 買粉絲nvert youtube to mp3 apple music(如何下載音樂?)
- 04 買粉絲untry music kane brown playlist(推薦一些好聽的英文歌(250分))
- 04 download how to mp3 from youtube(love the way you lie純女聲歌曲在哪邊下載?)
- 04 facebook下載最新版本2022(【新人必看】2022年Facebook最全推廣教程(三))
- 04 dap貿易術語2020(dap貿易術語是什么?)
- 04 買粉絲untry western music youtube(hokey pokey的英文簡介)
热门文章
站长推荐
04 download youtube music music 買粉絲s(歐美組合One Direction資料簡介)
04 買粉絲usin怎么讀(買粉絲usin怎么讀)
04 買粉絲bine sth with sth造句(英語解答)
04 diy beauty products to make(女人我最大 推薦的beauty diy 玫瑰保濕露好用嗎)
04 買粉絲untry music youtube 2022(sahi造句 sahiの例文 "sahi"是什麼意思)
04 download for youtube music download(can u tell me where to download the music s買粉絲re for Believe-Barbie and the diamond castle )
04 買粉絲usin發音視頻(買粉絲usin有侄子的意思嗎?我看一個新概念教學視頻里說它的意思是侄子。)
04 買粉絲nvert youtube to mp3 apple music(如何下載音樂?)