www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 架構師社區(qū)
[導讀]最近,又重新學習了下Redis,深深被Redis的魅力所折服,Redis不僅能快還能慢,簡直利器呀!

作者:_BKing

來源:www.cnblogs.com/xiaowei123/p/13222710.html


最近,又重新學習了下Redis,深深被Redis的魅力所折服,Redis不僅能快還能慢(我想也這么優(yōu)秀o(╥﹏╥)o),簡直利器呀

你知道Redis可以實現(xiàn)延遲隊列嗎?


你知道Redis可以實現(xiàn)延遲隊列嗎?


?咳咳咳,大家不要誤會,本文很正經(jīng)的啦!伙伴們跟我一起沖呀,我們一起去爬爬這座延時隊列的山峰,探一探它究竟到底有高。


你知道Redis可以實現(xiàn)延遲隊列嗎?



?那接下來開始我們的旅行啦~,我們都知道Redis是一種基于內(nèi)存的單進程單線程數(shù)據(jù)庫(Redis6.0開始之后支持多線程啦?。?,處理速度都非???。那么為何Redis又能慢呢?原來,這里說的慢是指Redis可以設置一些參數(shù)達到慢處理的結果。(這就是為什么Redis既能快又能慢啦?。?


那接下來開始講講我們的Redis在隊列中如何實現(xiàn)延時的情況:


在我們?nèi)粘I钪?,我們可以發(fā)現(xiàn):


  • 在淘寶、京東等購物平臺上下單,超過一定時間未付款,訂單會自動取消。

  • 打車的時候,在規(guī)定時間沒有車主接單,平臺會取消你的單并提醒你暫時沒有車主接單。

  • 點外賣的時候,如果商家在10分鐘還沒接單,就會自動取消訂單。

  • 收快遞的時候,如果我們沒有點確認收貨,在一段時間后程序會自動完成訂單。

  • 在平臺完成訂單后,如果我們沒有在規(guī)定時間評論商品,會自動默認買家不評論。

  • .......


這時,我們可以想想為什么要這樣做?


因為這樣可以保證商品的庫存可以釋放給其他人購買,你可以不用一直等待打車卻得不到回復,你可以及時換一家店點到外賣。

那么這些情況都是如何實現(xiàn)的呢?


這時我們可以看看這個圖,來看看消息延遲是如何處理的:


你知道Redis可以實現(xiàn)延遲隊列嗎?


?當用戶發(fā)送一個消息請求給服務器后臺的時候,服務器會檢測這條消息是否需要進行延時處理,如果需要就放入到延時隊列中,由延時任務檢測器進行檢測和處理,對于不需要進行延時處理的任務,服務器會立馬對消息進行處理,并把處理后的結果返會給用戶。


你知道Redis可以實現(xiàn)延遲隊列嗎?


?對于在延時任務檢測器內(nèi)部的話,有查詢延遲任務和執(zhí)行延時任務兩個職能,任務檢測器會先去延時任務隊列進行隊列中信息讀取,判斷當前隊列中哪些任務已經(jīng)時間到期并將已經(jīng)到期的任務輸出執(zhí)行(設置一個定時任務)。
這時,我們可以想一想在Redis的數(shù)據(jù)結構中有哪些能進行時間設置標志的命令?
是不是想到的 zset 這個命令,具有去重有序(分數(shù)排序)的功能。沒錯,你想對了呀!
我們可以使用 zset(sortedset)這個命令,用設置好的時間戳作為score進行排序,使用 zadd score1 value1 ....命令就可以一直往內(nèi)存中生產(chǎn)消息。再利用 zrangebysocre 查詢符合條件的所有待處理的任務,通過循環(huán)執(zhí)行隊列任務即可。也可以通過 zrangebyscore key min max withscores limit 0 1 查詢最早的一條任務,來進行消費。


你知道Redis可以實現(xiàn)延遲隊列嗎?


總的來說,你可以通過以下兩種方式來實現(xiàn)((*^▽^*)如果你想到其他方法,也可以告訴我下呀~):
(1)使用zrangebyscore來查詢當前延時隊列中所有任務,找出所有需要進行處理的延時任務,在依次進行操作。
(2)查找當前最早的一條任務,通過score值來判斷任務執(zhí)行的時候是否大于了當前系統(tǒng)的時候,比如說:最早的任務執(zhí)行時間在3點,系統(tǒng)時間在2點58分),表示這個應該需要立馬被執(zhí)行啦,時間快到了(沖沖沖,他來了他來了,他帶著死神的步伐來了)。


我們可以想一想Redis來實現(xiàn)延時隊列有何優(yōu)勢呢?


其實,Redis用來進行實現(xiàn)延時隊列是具有這些優(yōu)勢的:


  1. Redis zset支持高性能的 score 排序。

  2. Redis是在內(nèi)存上進行操作的,速度非??臁?

  3. Redis可以搭建集群,當消息很多時候,我們可以用集群來提高消息處理的速度,提高可用性。

  4. Redis具有持久化機制,當出現(xiàn)故障的時候,可以通過AOF和RDB方式來對數(shù)據(jù)進行恢復,保證了數(shù)據(jù)的可靠性

這時候,會有小伙伴問了還有沒有其他實現(xiàn)延時隊列的方式呀!emmm....當然有的,只有想不到的沒有做不到。


一、用消息中間件實現(xiàn)延時隊列


(1)通過 RabbitMQ 來實現(xiàn)延時隊列

方法一:在MQ中我們可以對Queue設置 x-expires 過期時間或者對 Message設置超時時間x-message-ttl。
(這里要注意下:延時相同的消息我們要扔到同一個隊列中,對于每一個延時要建立一個與之對應的隊列—這是由于MQ的過期檢測是惰性檢測的。)
方法二:我們可以用RabbitMQ的插件rabbitmq-delayed-message-exchange插件來實現(xiàn)延時隊列。達到可投遞時間時并將其通過 x-delayed-type 類型標記的交換機類型投遞至目標隊列。

你知道Redis可以實現(xiàn)延遲隊列嗎?


(2)RocketMQ實現(xiàn)延時隊列

rocketmq在發(fā)送延時消息時,是先把消息按照延遲時間段發(fā)送到指定的隊列中(把延時時間段相同的消息放到同一個隊列中,保證了消息處理的順序性,可以讓同一個隊列中消息延時時間是相同的,整個RocketMQ中延時消息時按照遞增順序排序,保證信息處理的先后順序性。)。之后,通過一個定時器來輪詢處理這些隊列里的信息,判斷是否到期。對于到期的消息會發(fā)送到相應的處理隊列中,進行處理。
注意 :目前RocketMQ只支持特定的延時時間段,1s,5s,10s,...2h,不能支持任意時間段的延時設置。有興趣的小伙伴可以去了解下它是相關知識呀~


二、Kafka實現(xiàn)延時隊

Kafka基于時間輪自定義了一個用于實現(xiàn)延遲功能的定時器(SystemTimer),Kafka中的時間輪(TimingWheel)是一個存儲定時任務的環(huán)形隊列,可以進行相關的延時隊列設置。


你知道Redis可以實現(xiàn)延遲隊列嗎?


三、Netty實現(xiàn)延時隊列

Netty也有基于時間輪算法來實現(xiàn)延時隊列。Netty在構建延時隊列主要用HashedWheelTimer,HashedWheelTimer底層數(shù)據(jù)結構是使用DelayedQueue,采用時間輪的算法來實現(xiàn)。


你知道Redis可以實現(xiàn)延遲隊列嗎?


四、DelayQueue來實現(xiàn)延時隊列

Java中有自帶的DelayQueue數(shù)據(jù)類型,我們可以用這個來實現(xiàn)延時隊列。DelayQueue是封裝了一個PriorityQueue(優(yōu)先隊列),在向DelayQueue隊列中添加元素時,會給元素一個Delay(延遲時間)作為排序條件,隊列中最小的元素會優(yōu)先放在隊首,對于隊列中的元素只有到了Delay時間才允許從隊列中取出。這種實現(xiàn)方式是數(shù)據(jù)保存在內(nèi)存中,可能面臨數(shù)據(jù)丟失的情況,同時它是無法支持分布式系統(tǒng)的。


你知道Redis可以實現(xiàn)延遲隊列嗎?


沖沖沖,小伙伴們!又是美好的一天。

特別推薦一個分享架構+算法的優(yōu)質(zhì)內(nèi)容,還沒關注的小伙伴,可以長按關注一下:

你知道Redis可以實現(xiàn)延遲隊列嗎?

你知道Redis可以實現(xiàn)延遲隊列嗎?

你知道Redis可以實現(xiàn)延遲隊列嗎?

長按訂閱更多精彩▼

你知道Redis可以實現(xiàn)延遲隊列嗎?

如有收獲,點個在看,誠摯感謝

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉