第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我準(zhǔn)備用redis的list做一個隊列系統(tǒng),基本思路是:

我準(zhǔn)備用redis的list做一個隊列系統(tǒng),基本思路是:

PHP
萬千封印 2023-04-16 15:18:34
1.把信息用LPUSH操作加到redis中某個list的頭部2.寫個cron定時執(zhí)行php讀取這個list。使用redis的RPOP操作從list尾部取走信息此外,redis有個BRPOP的操作,當(dāng)list里沒有未處理信息時,會把腳本阻塞住,有新的信息時才會繼續(xù)執(zhí)行。請問php怎么利用這個特性,要注意什么,另外這種長時間的連接對性能有沒有什么影響?ps.這樣的隊列系統(tǒng)設(shè)計合理嗎?
查看完整描述

2 回答

?
侃侃無極

TA貢獻2051條經(jīng)驗 獲得超10個贊

首先你在shell下執(zhí)行php,完全沒有最長實行時間這一說,你完全可以把一個php腳本作為進程不停的監(jiān)聽。

但是,你用LIST做隊列系統(tǒng)完全沒必要,一個是BRPOP的block是有最長時間限制的,你不能一直hold在那里。而更好的選擇是利用redis的PUB/SUB機制來做

下面是一個簡單監(jiān)聽進程,它監(jiān)聽了channel-1,你在shell下執(zhí)行它不要關(guān)掉

<?php$redis->subscribe(array('channel-1'), function ($redis, $chan, $msg) {    // do something
    echo $msg;
});

然后在其它的程序里向channel-1發(fā)送你需要發(fā)送的消息

<?php$redis->publish('channel-1', 'hello, world!');

如果你需要用LIST來操作,完全可以不要用BRPOP,直接在循環(huán)中RPOP就行

<?phpwhile (true) {    $msg = $redis->rPop('list-1');    if (false !== $msg) {        // 這里處理消息
    }    // 這里可以sleep
    sleep(60);
}


查看完整回答
反對 回復(fù) 2023-04-20
?
慕婉清6462132

TA貢獻1804條經(jīng)驗 獲得超2個贊

BRPOPLPUSH source destination timeout

BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,當(dāng)給定列表 source 不為空時, BRPOPLPUSH 的表現(xiàn)和 RPOPLPUSH 一樣。

當(dāng)列表 source 為空時, BRPOPLPUSH 命令將阻塞連接,直到等待超時,或有另一個客戶端對 source 執(zhí)行 LPUSH 或 RPUSH 命令為止。

超時參數(shù) timeout 接受一個以秒為單位的數(shù)字作為值。超時參數(shù)設(shè)為 0 表示阻塞時間可以無限期延長(block indefinitely) 。

完全能夠用LIST構(gòu)建一個隊列,用BRPOPLPUSH不會有超時問題


查看完整回答
反對 回復(fù) 2023-04-20
  • 2 回答
  • 0 關(guān)注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號