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

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

新聞中心

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

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

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

認(rèn)識Redis列表

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

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

而當(dāng)數(shù)據(jù)量較大時,Redis 列表就會是用 quicklist(快速鏈表)存儲元素。Redis 之所以采用兩種方法相結(jié)合的方式來存儲元素。這是因為單獨使用普通鏈表存儲元素時,所需的空間較大,會造成存儲空間的浪費。因此采用了鏈表和壓縮列表相結(jié)合的方式,也就是 quicklist + ziplist,結(jié)構(gòu)如下圖:

 



圖1:快速鏈表

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

基本命令演示

下面學(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"

隊列和棧實現(xiàn)

Redis 列表可以被當(dāng)做棧、隊列來使用,如果列表的元素是“左進(jìn)右出”那就是隊列模型;如果元素是“右進(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  的列表也常被用作異步隊列。使用流程大致如下:一個線程將需要延時處理的任務(wù)序列化成字符串,并“塞”進(jìn) Redis 列表中,而另外一個線程則以輪詢的方式從該列表中讀取“任務(wù)”。

常用命令

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

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

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


網(wǎng)站名稱:Redislist列表
文章網(wǎng)址:http://m.5511xx.com/article/cccpdsc.html