brpop & blpop
Last updated
Was this helpful?
Last updated
Was this helpful?
key[, key, ...]
, timeout:<integer>
, callback
) (1) brpop為rpop的阻塞(blocking)版本,當給定的串列為空時,執行緒將被阻塞(處於Waiting狀態),在阻塞時間(timeout
)內,當列表被賦予新的元素時,則移除並回傳最後一個元素。
(2) 當參數包含多個串列的key
時,會依序檢查每個串列,在阻塞時間timeout
內,直到出現第一個非空元素的串列,移除最後一個元素並回傳key及被移除的元素。
(3) 當超過阻塞時間timeout
後,則回傳空值;timeout
為0代表不限制阻塞時間。
(4) blpop用法跟brpop相似,差別只在blpop移除的是第一個元素。
以下範例透過lpush+brpop模擬訊息佇列(Message Queue)的應用情境:
Console會進入Waiting狀態,因為uid:4鍵值為空列表,執行緒暫時被阻塞。我們可以透過另啟redis-cli模擬Producer端行為對uid:4新增資料。
當server端成功傳送新資料到Redis,uid:4列表開始為非空元素時,client端等待的brpop便立即移除並回傳列表後一個元素。