日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

redis的list數(shù)據(jù)類(lèi)型相關(guān)命令介紹及使用_Redis

作者:凹凸曼藍(lán)博one ? 更新時(shí)間: 2022-03-29 編程語(yǔ)言

list列表簡(jiǎn)介

  • list是簡(jiǎn)單的字符串列表(說(shuō)通俗點(diǎn),存儲(chǔ)的還是字符串),按照插入順序排序。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊),個(gè)列表最多可以包含^32-1個(gè)元素(每個(gè)列表超過(guò)40億個(gè)元素)。
  • Redis中的list和Java中的LinkedList很像,底層都是一種鏈表結(jié)構(gòu),list的插入和刪除操作非常快,時(shí)間復(fù)雜度為 0(1),不像數(shù)組結(jié)構(gòu)插入、刪除操作需要移動(dòng)數(shù)據(jù)。像歸像,但是redis中的list底層可不是一個(gè)雙向鏈表那么簡(jiǎn)單。
  • 當(dāng)數(shù)據(jù)量較少的時(shí)候它的底層存儲(chǔ)結(jié)構(gòu)為一塊連續(xù)內(nèi)存,稱(chēng)之為ziplist(壓縮列表),它將所有的元素緊挨著一起存儲(chǔ),分配的是一塊連續(xù)的內(nèi)存;當(dāng)數(shù)據(jù)量較多的時(shí)候?qū)?huì)變成quicklist(快速鏈表)結(jié)構(gòu)。
  • 可單純的鏈表也是有缺陷的,鏈表的前后指針prev和next會(huì)占用較多的內(nèi)存,會(huì)比較浪費(fèi)空間,而且會(huì)加重內(nèi)存的碎片化。在redis 3.2之后就都改用ziplist+鏈表的混合結(jié)構(gòu),稱(chēng)之為quicklist(快速鏈表)。

常用命令

添加命令

lpush key value

從左邊插入元素(將一個(gè)或多個(gè)值插入到列表頭部)

127.0.0.1:6379> lpush ids 1
(integer) 1
127.0.0.1:6379> lrange ids 0 -1
1) "1"
127.0.0.1:6379> lpush ids 2
(integer) 2
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"

rpush key value

從右邊插入元素(將一個(gè)或多個(gè)值插入到列表的尾部(最右邊))

127.0.0.1:6379> rpush ids 3
(integer) 3
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "3"

linsert key BEFORE|AFTER pivot value
向某個(gè)元素前/后插入元素,返回結(jié)果為當(dāng)前列表長(zhǎng)度,注意列表不存在或者指定元素不存在列表中時(shí),都將不執(zhí)行任何操作。

//元素3前插入0
127.0.0.1:6379> linsert ids before 3 0
(integer) 4
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "0"
4) "3"
//元素3后插入0
127.0.0.1:6379> linsert ids after 3 4
(integer) 5
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "0"
4) "3"
5) "4"

查詢(xún)命令

lrange key start end
獲取列表中指定范圍內(nèi)的元素列表;若start值大于列表end值則返回空列表
如上已經(jīng)展示過(guò)了

lindex key index
獲取列表指定索引下標(biāo)的元素

127.0.0.1:6379> lindex ids 0
"2"
127.0.0.1:6379> lindex ids -1
"4"

llen key
獲取列表長(zhǎng)度;列表不存在則返回0

127.0.0.1:6379> llen ids
(integer) 5

彈出/刪除命令

lpop key
從列表左側(cè)彈出元素并返回頭部元素

127.0.0.1:6379> lpop ids
"2"
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"
3) "3"
4) "4"

rpop key
從列表右側(cè)彈出元素并返回尾部元素

127.0.0.1:6379> rpop ids
"4"
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"
3) "3"

lrem key count value
從列表中找到等于value的元素進(jìn)行刪除,根據(jù)count的不同分為三種情況:
count > 0,從表頭開(kāi)始向表尾,移除數(shù)量為count個(gè)元素;
count < 0,從表尾開(kāi)始向表頭,移除數(shù)量為count的絕對(duì)值個(gè)元素;
count = 0,移除表中所有與 value 相等的值

127.0.0.1:6379> lrem ids 0 3
(integer) 1
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"

ltrim key start end
對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說(shuō),讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除

127.0.0.1:6379> ltrim ids 0 0
OK
127.0.0.1:6379> lrange ids 0 -1
1) "1"

修改命令

lset key index value
修改指定下標(biāo)的元素的值設(shè)置為value

127.0.0.1:6379> lset ids 0 0
OK
127.0.0.1:6379> lrange ids 0 -1
1) "0"

阻塞彈出命令

blpop key [key …] timeout
移出并獲取列表的第一個(gè)元素, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)(單位秒)或發(fā)現(xiàn)可彈出元素為止

brpop key [key …] timeout
移出并獲取列表的最后一個(gè)元素, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止
演示:
開(kāi)啟三個(gè)reids連接窗口,第一個(gè)執(zhí)行blpop ,第二個(gè)執(zhí)行brpop ,第三個(gè)執(zhí)行添加:
可以看到窗口1和2執(zhí)行完都已經(jīng)阻塞在這里,這是因?yàn)閕ds中沒(méi)有元素

在這里插入圖片描述

在這里插入圖片描述

窗口3執(zhí)行添加:lpush ids 1 2 3 4 5 6
可以看到窗口1和2立即彈出對(duì)應(yīng)元素:

在這里插入圖片描述

在這里插入圖片描述

應(yīng)用場(chǎng)景

消息隊(duì)列:lpop和rpush(或者反過(guò)來(lái),lpush和rpop)能實(shí)現(xiàn)隊(duì)列的功能

朋友圈的點(diǎn)贊列表、評(píng)論列表、排行榜:lpush命令和lrange命令能實(shí)現(xiàn)最新列表的功能,每次通過(guò)lpush命令往列表里插入新的元素,然后通過(guò)lrange命令讀取最新的元素列表。

原文鏈接:https://blog.csdn.net/weixin_45240169/article/details/122490478

欄目分類(lèi)
最近更新