您好,登錄后才能下訂單哦!
list是一個(gè)內(nèi)部采用雙向鏈表(double linked list) 結(jié)構(gòu),像列表兩端添加元素的時(shí)間復(fù)雜度為O(1)。主要功能是push、pop、獲取一個(gè)范圍的所有值等,操作中key理解為鏈表的名字。
鏈表的最大長(zhǎng)度是(2的32次方)。我們可以通過(guò)push,pop操作從鏈表的頭部或者尾部添加刪除元素。這使得list既可以用作棧,也可以用作隊(duì)列。
list的pop操作均有阻塞版本的,當(dāng)我們[lr]pop一個(gè)list對(duì)象時(shí),如果list是空,或者不存在,會(huì)立即返回nil。但是阻塞版本的b[lr]pop可以則可以阻塞,當(dāng)然可以加超時(shí)時(shí)間,超時(shí)后也會(huì)返回nil。為什么要阻塞版本的pop呢,主要是為了避免輪詢(xún)。
舉個(gè)簡(jiǎn)單的例子如果我們用list來(lái)實(shí)現(xiàn)一個(gè)工作隊(duì)列。執(zhí)行任務(wù)的thread可以調(diào)用阻塞版本的pop去獲取任務(wù)這樣就可以避免輪詢(xún)?nèi)z查是否有任務(wù)存在。當(dāng)任務(wù)來(lái)時(shí)候工作線程可以立即返回,也可以避免輪詢(xún)帶來(lái)的延遲。
LPUSH Key value 左邊插入
RPUSH Key value 右邊插入
LPop key 左邊彈出
RPop key 右邊彈出
BLPOP,BRPOP阻塞式左/右彈出
lpush
129.223.248.154:6379> lpush members ben (integer) 1 129.223.248.154:6379> lpush members jeff (integer) 2 129.223.248.154:6379> lpush members mike jeme (integer) 6
lpop
129.223.248.154:6379> lpop members "raymond" 129.223.248.154:6379> rpop members "ben"
llen
129.223.248.154:6379> llen members (integer) 4
lrange (lrange firstqueue 0 -1 列出list中全部元素值)
129.223.248.154:6379> lrange members 0 2 1) "richard" 2) "jemery" 3) "mike" 129.223.248.154:6379> llen members (integer) 4 129.223.248.154:6379> lrange members 0 3 1) "richard" 2) "jemery" 3) "mike" 4) "jeff" 129.223.248.154:6379> lrange members 0 4 1) "richard" 2) "jemery" 3) "mike" 4) "jeff" 129.223.248.154:6379> lrange members 0 -1 1) "richard" 2) "jemery" 3) "mike" 4) "jeff" 5) "derek"
rpop
129.223.248.154:6379> rpop members "derek" 129.223.248.154:6379> lpop members "richard" 129.223.248.154:6379> lrange members 0 -1 1) "jemery" 2) "mike" 3) "jeff"
lindex
129.223.248.154:6379> lindex members 1 "mike" 129.223.248.154:6379> llen members (integer) 3 129.223.248.154:6379> rpush firstqueue 3 2 1 (integer) 3 129.223.248.154:6379> lrange firstqueue 0 -1 1) "3" 2) "2" 3) "1" 129.223.248.154:6379> lpush secqueue 3 2 (integer) 2 129.223.248.154:6379> lrange secqueue 0 -1 1) "2" 2) "3"
rpoplpush 從第一個(gè)list的尾部移除元素并添加到第二個(gè)list的頭部,最后返回被移除的元素值,整個(gè)操作是原子的.如果第一個(gè)list是空或者不存在返回nil
129.223.248.154:6379> rpoplpush firstqueue secqueue "1" 129.223.248.154:6379> lrange firstqueue 0 -1 1) "3" 2) "2" 129.223.248.154:6379> lrange secqueue 0 -1 1) "1" 2) "2" 3) "3" 129.223.248.154:6379>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。