摘要:基于消息隊(duì)列實(shí)現(xiàn)的消息推送基本知識(shí)點(diǎn)重點(diǎn)用到了以下命令實(shí)現(xiàn)我們的消息推送阻塞模式從隊(duì)列右邊獲取值之后刪除從隊(duì)列的右邊取值之后刪除,從左側(cè)放置到隊(duì)列中邏輯分析在普通的任務(wù)腳本中寫入隊(duì)列要發(fā)送消息的目標(biāo),并為目標(biāo)設(shè)置一個(gè)要推送的內(nèi)容,永不過期中
基于Redis消息隊(duì)列實(shí)現(xiàn)的消息推送 基本知識(shí)點(diǎn)
重點(diǎn)用到了以下命令實(shí)現(xiàn)我們的消息推送
brpop 阻塞模式 從隊(duì)列右邊獲取值之后刪除
brpoplpush 從隊(duì)列A的右邊取值之后刪除,從左側(cè)放置到隊(duì)列B中
邏輯分析在普通的任務(wù)腳本中寫入push_queue隊(duì)列要發(fā)送消息的目標(biāo),并為目標(biāo)設(shè)置一個(gè)要推送的內(nèi)容,永不過期
RedisPushQueue中brpoplpush處理,處理后的值放到temp_queue,主要防止程序崩潰造成推送失敗
RedisAutoDeleteTempqueueItems處理temp_queue,這里用到了brpop
代碼實(shí)現(xiàn)
普通任務(wù)腳本
lPush("push_queue",$k_name);//左進(jìn)隊(duì)列 $redis->set($k_name, "推送內(nèi)容"); }
RedisPushQueue
connect("127.0.0.1", 6379); $redis->select(2);//切換到db2 $redis->setOption(Redis::OPT_READ_TIMEOUT, -1); // temp_queue臨時(shí)隊(duì)列防止程序崩潰導(dǎo)致隊(duì)列中內(nèi)容丟失 0代表永不超時(shí)! While ($key = $redis->brpoplpush("push_queue", "temp_queue", 0)) { if ($val = $redis->get($key)) { //rabbit_push_20_175990 $arr = explode("_", $key); if (count($arr) != 4) { continue; } $id = $arr[2]; push($id, $val); //刪除key內(nèi)容 $redis->del($key); } } function push($id, $v) { //推送操作~ }
RedisAutoDeleteTempqueueItems
connect("127.0.0.1", 6379); $redis->select(2);//切換到db2 $redis->setOption(Redis::OPT_READ_TIMEOUT, -1); while($key_arr = $redis->brPop("temp_queue",0)){ if(count($key_arr) != 2){ continue; } $key =$key_arr[1]; if($redis->get($key)){//能獲取到值 說明RedisPushQueue執(zhí)行失敗 $redis->lPush("push_queue",$key); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29697.html
摘要:如果任務(wù)沒有在規(guī)定時(shí)間內(nèi)完成,那么該有序集合的任務(wù)將會(huì)被重新放入隊(duì)列中。這兩個(gè)進(jìn)程操縱了三個(gè)隊(duì)列,其中一個(gè),負(fù)責(zé)即時(shí)任務(wù),兩個(gè),負(fù)責(zé)延時(shí)任務(wù)與待處理任務(wù)。如果任務(wù)執(zhí)行成功,就會(huì)刪除中的任務(wù),否則會(huì)被重新放入隊(duì)列中。 在實(shí)際的項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)遇到需要輕量級(jí)隊(duì)列的情形,例如發(fā)短信、發(fā)郵件等,這些任務(wù)不足以使用 kafka、RabbitMQ 等重量級(jí)的消息隊(duì)列,但是又的確需要異步、重試...
摘要:負(fù)責(zé)從拉取數(shù)據(jù)源,把數(shù)據(jù)源分詞,建立索引搜索模塊工作流程如下模塊從中拉取數(shù)據(jù)模塊用經(jīng)過中文分詞后的數(shù)據(jù)建立索引客戶端向模塊發(fā)起搜索請(qǐng)求模塊查找索引中的數(shù)據(jù)模塊得到索引中符合要求的數(shù)據(jù)的等數(shù)據(jù)把數(shù)據(jù)返回給客戶端 (整理自《App后臺(tái)開發(fā)運(yùn)維和架構(gòu)實(shí)踐》 作者:曾健生) 一、從業(yè)務(wù)邏輯中提煉API接口 此過程可分為六個(gè)階段: 業(yè)務(wù)邏輯思維導(dǎo)圖 功能——業(yè)務(wù)邏輯思維導(dǎo)圖 基本功能模塊關(guān)系 ...
摘要:負(fù)責(zé)從拉取數(shù)據(jù)源,把數(shù)據(jù)源分詞,建立索引搜索模塊工作流程如下模塊從中拉取數(shù)據(jù)模塊用經(jīng)過中文分詞后的數(shù)據(jù)建立索引客戶端向模塊發(fā)起搜索請(qǐng)求模塊查找索引中的數(shù)據(jù)模塊得到索引中符合要求的數(shù)據(jù)的等數(shù)據(jù)把數(shù)據(jù)返回給客戶端 (整理自《App后臺(tái)開發(fā)運(yùn)維和架構(gòu)實(shí)踐》 作者:曾健生) 一、從業(yè)務(wù)邏輯中提煉API接口 此過程可分為六個(gè)階段: 業(yè)務(wù)邏輯思維導(dǎo)圖 功能——業(yè)務(wù)邏輯思維導(dǎo)圖 基本功能模塊關(guān)系 ...
閱讀 2767·2019-08-30 15:53
閱讀 536·2019-08-29 17:22
閱讀 1075·2019-08-29 13:10
閱讀 2331·2019-08-26 13:45
閱讀 2764·2019-08-26 10:46
閱讀 3210·2019-08-26 10:45
閱讀 2516·2019-08-26 10:14
閱讀 478·2019-08-23 18:23