日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Redislist列表
Redis list(列表)相當(dāng)于 Java 語(yǔ)言中的 LinkedList 結(jié)構(gòu),是一個(gè)鏈表而非數(shù)組,其插入、刪除元素的時(shí)間復(fù)雜度為 O(1),但是查詢速度欠佳,時(shí)間復(fù)雜度為 O(n)。

乳山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

當(dāng)向列表中添加元素值時(shí),首先需要給這個(gè)列表指定一個(gè) key 鍵,然后使用相應(yīng)的命令,從列表的左側(cè)(頭部)或者右側(cè)(尾部)來(lái)添加元素,這些元素會(huì)以添加時(shí)的順序排列。一個(gè)列表最多可以包含 2^32 - 1 個(gè)元素(約 40 億個(gè)元素),當(dāng)列表彈出最后一個(gè)元素時(shí),該結(jié)構(gòu)會(huì)被自動(dòng)刪除。

認(rèn)識(shí)Redis列表

Redis 列表的底層存儲(chǔ)結(jié)構(gòu),其實(shí)是一個(gè)被稱為快速鏈表(quicklist)的結(jié)構(gòu)。當(dāng)列表中存儲(chǔ)的元素較少時(shí),Redis 會(huì)使用一塊連續(xù)的內(nèi)存來(lái)存儲(chǔ)這些元素,這個(gè)連續(xù)的結(jié)構(gòu)被稱為 ziplist(壓縮列表),它將所有的元素緊挨著一起存儲(chǔ)。

壓縮列表是 Redis 為節(jié)省內(nèi)存而開(kāi)發(fā)的,它是由一系列特殊編碼的連續(xù)內(nèi)存塊組成的順序型數(shù)據(jù)結(jié)構(gòu),一個(gè)壓縮列表了可以包含任意多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都可以保存一個(gè)字符數(shù)組或者整數(shù)值。

而當(dāng)數(shù)據(jù)量較大時(shí),Redis 列表就會(huì)是用 quicklist(快速鏈表)存儲(chǔ)元素。Redis 之所以采用兩種方法相結(jié)合的方式來(lái)存儲(chǔ)元素。這是因?yàn)閱为?dú)使用普通鏈表存儲(chǔ)元素時(shí),所需的空間較大,會(huì)造成存儲(chǔ)空間的浪費(fèi)。因此采用了鏈表和壓縮列表相結(jié)合的方式,也就是 quicklist + ziplist,結(jié)構(gòu)如下圖:

 



圖1:快速鏈表

如上圖 1 所示,將多個(gè) ziplist 使用雙向指針串聯(lián)起來(lái),這樣既能滿足快速插入、刪除的特性,又節(jié)省了一部分存儲(chǔ)空間。

基本命令演示

下面學(xué)習(xí)如何使用命令操作 Redis 列表。以下示例演示了如何從列表的左側(cè)、右側(cè)添加和彈出元素。

#從左側(cè)頭部插入元素
127.0.0.1:6379> LPUSH www.biancheng.net python
(integer) 1
127.0.0.1:6379> LPUSH www.biancheng.net java c c#
(integer) 4
#查看插入的元素
127.0.0.1:6379> LRANGE www.biancheng.net 0 4
1) "c#"
2) "c"
3) "java"
4) "python"
#從右側(cè)尾部插入元素
127.0.0.1:6379> RPUSH www.biancheng.net "Math"
(integer) 5
127.0.0.1:6379> RPUSH www.biancheng.net "Computer Language"
(integer) 6
#查看元素
127.0.0.1:6379> LRANGE www.biancheng.net 0 6
1) "c#"
2) "c"
3) "java"
4) "python"
5) "Math"
6) "Computer Language"
#在python前面插入元素
127.0.0.1:6379> LINSERT www.biancheng.net BEFORE python Python
(integer) 7
#從左側(cè)彈出元素
127.0.0.1:6379> LPOP www.biancheng.net
"c#"
#從右側(cè)彈出元素
127.0.0.1:6379> RPOP www.biancheng.net
"Computer Language"

隊(duì)列和棧實(shí)現(xiàn)

Redis 列表可以被當(dāng)做棧、隊(duì)列來(lái)使用,如果列表的元素是“左進(jìn)右出”那就是隊(duì)列模型;如果元素是“右進(jìn)右出”那就是棧模型,示例如下:

1) 右進(jìn)左出

127.0.0.1:6379> Rpush book c python java
(integer) 3
127.0.0.1:6379> lpop book
"c"
127.0.0.1:6379> lpop book
"python"
127.0.0.1:6379> lpop book
"java"
127.0.0.1:6379> lpop book
(nil)

2) 右進(jìn)右出

127.0.0.1:6379> RPUSH book  c python java
(integer) 3
127.0.0.1:6379> rpop book
"java"
127.0.0.1:6379> rpop book
"python"
127.0.0.1:6379> rpop book
"c"
127.0.0.1:6379> rpop book
(nil)

除上述模型外,Redis  的列表也常被用作異步隊(duì)列。使用流程大致如下:一個(gè)線程將需要延時(shí)處理的任務(wù)序列化成字符串,并“塞”進(jìn) Redis 列表中,而另外一個(gè)線程則以輪詢的方式從該列表中讀取“任務(wù)”。

常用命令

list類型常用命令
命令 說(shuō)明
LPUSH key value1 [value2] 在列表頭部插入一個(gè)或者多個(gè)值。
LRANGE key start stop 獲取列表指定范圍內(nèi)的元素。
RPUSH key value1 [value2] 在列表尾部添加一個(gè)或多個(gè)值。
LPUSHX key value 當(dāng)儲(chǔ)存列表的 key 存在時(shí),用于將值插入到列表頭部。
RPUSHX key value 當(dāng)存儲(chǔ)列表的 key 存在時(shí),用于將值插入到列表的尾部。
LINDEX key index 通過(guò)索引獲取列表中的元素。
LINSERT key before|after pivot value 指定列表中一個(gè)元素在它之前或之后插入另外一個(gè)元素。
LREM key count value 表示從列表中刪除元素與 value 相等的元素。count 表示刪除的數(shù)量,為 0 表示全部移除。
LSET key index value 表示通過(guò)其索引設(shè)置列表中元素的值。
LTRIM key start stop 保留列表中指定范圍內(nèi)的元素值。
LPOP key 從列表的頭部彈出元素,默認(rèn)為第一個(gè)元素。
RPOP key 從列表的尾部彈出元素,默認(rèn)為最后一個(gè)元素。
LLEN key 用于獲取列表的長(zhǎng)度。
RPOPLPUSH source destination 用于刪除列表中的最后一個(gè)元素,然后將該元素添加到另一個(gè)列表的頭部,并返回該元素值。
BLPOP key1 [key2 ] timeout 用于刪除并返回列表中的第一個(gè)元素(頭部操作),如果列表中沒(méi)有元素,就會(huì)發(fā)生阻塞,
直到列表等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
BRPOP key1 [key2 ] timeout 用于刪除并返回列表中的最后一個(gè)元素(尾部操作),如果列表中沒(méi)有元素,就會(huì)發(fā)生阻塞, 直到列表等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
BRPOPLPUSH source destination timeout 從列表中取出最后一個(gè)元素,并插入到另一個(gè)列表的頭部。如果列表中沒(méi)有元素,就會(huì)發(fā)生
阻塞,直到等待超時(shí)或發(fā)現(xiàn)可彈出元素時(shí)為止。

在線練習(xí)工具:https://try.redis.io/

查看更多命令:https://redis.io/commands


當(dāng)前標(biāo)題:Redislist列表
當(dāng)前地址:http://www.5511xx.com/article/cccpdsc.html