生產者與消費者的程式碼故事。
任務佇列
Method 1
讀取任務佇列中的內容
loop
$task = RPOP queue
if $task
execute $task
else
wait 1s
每一秒都有呼叫命令來檢視是否有新任務,實際上這種方式的效率是很低的。
可否建立訊息通知功能,每有新的任務,通知消費者
來執行任務。
藉助BRPOP
就可以實現這樣的功能。
BRPOP: 當列表中沒有元素時,BRPOP命令會一直阻塞住連線,直到有新元素加入。
Method 2
修改的程式碼:
$task = BRPOP queue, 0
execute $task[1]
同理於
BLPOP
&RPUSH
優先順序佇列
由於BRPOP
可以一次執行多個鍵,藉此特性可以製作優先順序佇列
loop
$task =
BRPOP queue.confirmation.email,
queue.notification.email,
0
execute $task[1]
兩個queue
互不影響,那麼一個執行緒就可以監聽兩個佇列的內容,哪怕是一個佇列的內容很多,但是每次loop還是會執行一次另外一個佇列。