W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
blpop key1...keyN timeout
從左到右掃描返回對第一個非空list進行l(wèi)pop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在list2,list3都是非空則對list2做lpop并返回從list2中刪除的元素。如果所有的list都是空或不存在,則會阻塞timeout秒,timeout為0表示一直阻塞。當阻塞時,如果有client對key1...keyN中的任意key進行push操作,則第一在這個key上被阻塞的client會立即返回(返回鍵和值)。如果超時發(fā)生,則返回nil。有點像unix的select或者poll。
brpop
同blpop,一個是從頭部刪除一個是從尾部刪除。
注意:不要采用其作為ajax的服務端推送,因為連接有限,遇到問題連接直接打滿。
BLPOP/BRPOP 的先到先服務原則 如果有多個客戶端同時因為某個列表而被阻塞,那么當有新值被推入到這個列表時,服務器會按照先到先服務(first in first service)原則,優(yōu)先向最早被阻塞的客戶端返回新值。舉個例子,假設列表 lst 為空,那么當客戶端 X 執(zhí)行命令 BLPOP lst timeout 時,客戶端 X 將被阻塞。在此之后,客戶端 Y 也執(zhí)行命令 BLPOP lst timeout ,也因此被阻塞。如果這時,客戶端 Z 執(zhí)行命令 RPUSH lst "hello" ,將值 "hello" 推入列表 lst ,那么這個 "hello" 將被返回給客戶端 X ,而不是客戶端 Y ,因為客戶端 X 的被阻塞時間要早于客戶端 Y 的被阻塞時間。
rpoplpush/brpoplpush:rpoplpush srckey destkey 從srckey對應list的尾部移除元素并添加到destkey對應list的頭部,最后返回被移除的元素值,整個操作是原子的.如果srckey是空或者不存在返回nil,注意這是唯一一個操作兩個列表的操作,用于兩個隊列交換消息。
應用場景:task + bak 雙鏈表完成工作任務轉(zhuǎn)交的安全隊列,保證原子性。 業(yè)務邏輯: 1: Rpoplpush task bak 2: 接收返回值,并做業(yè)務處理 3: 完成時用LREM消掉。如不成功或者如果集群管理(如zookeeper)發(fā)現(xiàn)worker已經(jīng)掛掉,下次從bak表里取任務
另一個應用場景是循環(huán)鏈表: 127.0.0.1:6379> lrange list 0 -1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> rpoplpush list list "a" 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "c" 3) "b"
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: