網(wǎng)站首頁(yè) 編程語(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
相關(guān)推薦
- 2022-10-12 Python數(shù)據(jù)分析之使用scikit-learn構(gòu)建模型_python
- 2023-04-01 Rust利用tauri制作個(gè)效率小工具_(dá)Rust語(yǔ)言
- 2022-12-13 Python使用Matplotlib繪制三維散點(diǎn)圖詳解流程_python
- 2022-03-27 Android實(shí)現(xiàn)圓形菜單懸浮窗_Android
- 2022-06-19 python?rsa和Crypto.PublicKey.RSA?模塊詳解_python
- 2022-11-14 elasticsearch 性能優(yōu)化
- 2022-08-02 python?GUI編程實(shí)現(xiàn)掃雷游戲_python
- 2023-04-08 C#中{get;set;}的具體使用_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支