溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Redis基礎(chǔ)教程第6節(jié) List

發(fā)布時(shí)間:2020-06-30 18:00:39 來(lái)源:網(wǎng)絡(luò) 閱讀:438 作者:yuanzhitang 欄目:關(guān)系型數(shù)據(jù)庫(kù)

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>


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI