新聞中心

乳山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ù)”。
常用命令
| 命令 | 說明 |
|---|---|
| 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


咨詢
建站咨詢
