Redis實現(xiàn)任務(wù)隊列(一)

概述

? ? 在處理Web客戶端發(fā)送的命令請求時,某些操作的執(zhí)行時間可能會比我們預(yù)期的更長一些。通過將待執(zhí)行任務(wù)的相關(guān)信息放入隊列里面接校,并在之后對隊列進(jìn)行處理,用戶可以推遲執(zhí)行那些需要一段時間才能完成的操作狮崩,這種將工作交給任務(wù)處理器來執(zhí)行的做法稱為任務(wù)隊列蛛勉。

單任務(wù)隊列

? ? 先進(jìn)先出隊列需要用到redis的列表結(jié)構(gòu)。redis的列表結(jié)構(gòu)允許用戶通過RPUSH和LPUSH睦柴,以及RPOP和LOP诽凌,從列表的兩端推入和彈出元素。

如下是最簡單的單任務(wù)隊列:


圖1 ?把數(shù)據(jù)放入隊列


圖2 ?把數(shù)據(jù)從隊列取出并處理數(shù)據(jù)

多任務(wù)隊列

? ? BLPOP命令每次只會從隊列里面彈出一包數(shù)據(jù)坦敌,所以待處理的數(shù)據(jù)不會重復(fù)處理侣诵。該工作進(jìn)程要處理的任務(wù)是非常單一的招刹。在某些情況下,為每種任務(wù)單獨使用一個隊列的做法并不少見窝趣,但是在另外一些情況下疯暑,如果一個隊列能夠處理多種不同類型的任務(wù),那么事情會方便很多哑舒。

? ? 下面代碼中展示的工作進(jìn)程會監(jiān)事用戶提供的多個隊列妇拯,并從多個已知的已注冊回調(diào)函數(shù)里面,選出一個函數(shù)來處理json編碼的函數(shù)調(diào)用洗鸵。隊列中每個待執(zhí)行任務(wù)的格式都為['FUNCTION_NAME',[ARG1,ARG2,...]]越锈。


圖3 ?多任務(wù)隊列

任務(wù)優(yōu)先級

? ? 在使用隊列的時候,程序可能會需要讓特定的操作優(yōu)先于其他操作執(zhí)行膘滨。假設(shè)現(xiàn)在我們需要為任務(wù)設(shè)置高甘凭、中、低3種優(yōu)先級別火邓,其中:高優(yōu)先級任務(wù)在出現(xiàn)之后會第一時間被執(zhí)行丹弱,而中等;優(yōu)先級任務(wù)則會在沒有任何高優(yōu)先級任務(wù)存在的情況下被執(zhí)行铲咨,而低優(yōu)先級任務(wù)則會在既沒有高優(yōu)先級任務(wù)躲胳,又沒有任何中等優(yōu)先級任務(wù)的情況下被執(zhí)行。實際上我們只需要修改worker_watch_queue()函數(shù)的兩行代碼纤勒,就可以給任務(wù)隊列加上優(yōu)先級特性坯苹。


圖4 ?任務(wù)優(yōu)先級

? ? 同時使用多個隊列可以降低實現(xiàn)優(yōu)先級特性的難度。除此之外摇天,多隊列有時候也會被用于分隔不同的任務(wù)粹湃,在這種情況下,處理不同隊列時可能會出現(xiàn)不公平的現(xiàn)象泉坐。為此为鳄,我們可以偶爾重新排列各個隊列的順序呢,使得針對隊列的處理操作變得更公平一些——當(dāng)某個隊列的增長速度比其他隊列的增長速度快的時候坚冀,這種重排操作尤為重要济赎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鉴逞,一起剝皮案震驚了整個濱河市记某,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌构捡,老刑警劉巖液南,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異勾徽,居然都是意外死亡滑凉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畅姊,“玉大人咒钟,你說我怎么就攤上這事∪粑矗” “怎么了朱嘴?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粗合。 經(jīng)常有香客問我萍嬉,道長,這世上最難降的妖魔是什么隙疚? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任壤追,我火速辦了婚禮,結(jié)果婚禮上供屉,老公的妹妹穿的比我還像新娘行冰。我一直安慰自己,他們只是感情好伶丐,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布资柔。 她就那樣靜靜地躺著,像睡著了一般撵割。 火紅的嫁衣襯著肌膚如雪贿堰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天啡彬,我揣著相機與錄音羹与,去河邊找鬼。 笑死庶灿,一個胖子當(dāng)著我的面吹牛纵搁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播往踢,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼腾誉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了峻呕?” 一聲冷哼從身側(cè)響起利职,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘦癌,沒想到半個月后猪贪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡讯私,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年热押,在試婚紗的時候發(fā)現(xiàn)自己被綠了西傀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡桶癣,死狀恐怖拥褂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牙寞,我是刑警寧澤肿仑,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站碎税,受9級特大地震影響尤慰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雷蹂,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一伟端、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匪煌,春花似錦责蝠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驳规,卻和暖如春肴敛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吗购。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工医男, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捻勉。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓镀梭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親踱启。 傳聞我的和親對象是個殘疾皇子报账,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)埠偿,斷路器透罢,智...
    卡卡羅2017閱讀 134,626評論 18 139
  • 本文將從Redis的基本特性入手琐凭,通過講述Redis的數(shù)據(jù)結(jié)構(gòu)和主要命令對Redis的基本能力進(jìn)行直觀介紹芽隆。之后概...
    kelgon閱讀 61,130評論 23 626
  • GCD調(diào)度隊列是執(zhí)行任務(wù)的強大工具浊服。調(diào)度隊列允許您相對于調(diào)度者異步或者同步的執(zhí)行任意代碼塊统屈。您能夠使用調(diào)度隊列來執(zhí)...
    坤坤同學(xué)閱讀 6,668評論 1 3
  • 我的衣柜里有個袋子,袋子里裝的全是圍巾牙躺。有紅的愁憔、黃的,粉的孽拷,藍(lán)的吨掌,花的?有羊絨的,真絲的脓恕,雪紡的膜宋,棉麻的?有長方形...
    梅雨中閱讀 370評論 0 0
  • 耳邊你的掌聲,為她舞蹈動人炼幔。 眼前我的鏡頭秋茫,為她每一次的準(zhǔn)備。 拍攝時間:2016年6月2日乃秀; 拍攝地點:六藝樓舞...
    土土的垚閱讀 360評論 0 5