Redis數據類型之list

上篇文章:

Redis數據類型之hashhttps://blog.csdn.net/sniper_fandc/article/details/149139615?fromshare=blogdetail&sharetype=blogdetail&sharerId=149139615&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目錄

1 lpush、lpushx和lrange

2 rpush和rpushx

3 lpop和rpop

4 lindex、linsert和llen

5 lrem

6 ltrim和lset

7 blpop和brpop

8 list的使用場景


????????list是列表,實際上更接近雙端隊列,支持頭插、尾差、頭刪和尾刪等基本操作,可以用來充當棧或隊列的使用。

1 lpush、lpushx和lrange

????????命令:lpush key value1 value2 ...

????????頭插插入list多個元素。時間復雜度O(N),N表示插入元素的個數。返回值是list的長度。如果key不存在就創建;如果key存在就頭插。因為是頭插,所以最后插入的元素會在list的第一個位置。

????????命令:lrange key start end

????????查詢list下標范圍[start,end]的元素。時間復雜度O(N),N表示查詢元素的個數。返回值按下標順序的各元素。同樣,下標也支持負數下標(表示倒數第幾個)。如果下標超出范圍,redis就會盡可能糾正下標到正確范圍

????????命令:lpushx key value1 value2 ...

????????如果key存在,頭插插入list多個元素;否則不插入。時間復雜度O(N),N表示插入元素的個數。返回值是list的長度。

2 rpush和rpushx

????????命令:rpush key value1 value2 ...

????????尾插插入list多個元素。時間復雜度O(N),N表示插入元素的個數。返回值是list的長度。如果key不存在就創建;如果key存在就尾插。因為是尾插,所以最先插入的元素會在list的第一個位置。

????????命令:rpushx key value1 value2 ...

????????如果key存在,尾插插入list多個元素;否則不插入。時間復雜度O(N),N表示插入元素的個數。返回值是list的長度。

3 lpop和rpop

????????命令:lpop key

????????頭刪key的list的元素。時間復雜度O(1)。返回值是被刪除的元素或nil。

????????命令:rpop key

????????尾刪key的list的元素。時間復雜度O(1)。返回值是被刪除的元素或nil。

????????可以搭配lpush和rpush實現隊列或棧。(lpush和lpop)或(rpush和rpop)是棧,(lpush和rpop)或(rpush和lpop)是隊列。

????????注意:在redis 6.2版本后引入count參數可以一次刪除多個元素。比如lpop key count,連續頭刪key對應list的count個元素。

4 lindex、linsert和llen

????????命令:lindex key index

????????獲取list中下標index的元素。時間復雜度O(N),N是list的長度,這里因為list的底層實現可能是鏈表,鏈表查詢是O(N)的復雜度。返回值是查詢的元素或nil。

????????命令:linsert key before | after element value

????????在element元素前(before)或后(after)插入value。時間復雜度O(N),N是list的長度。返回值是list的長度。

????????如果list中有重復的元素,就會從list頭開始從左向右遍歷找到第一個重復的元素進行插入:

????????命令:llen key

????????返回list的長度。時間復雜度O(1)。

5 lrem

????????命令:lrem key count element

????????刪除list中count個元素element。時間復雜度O(N+M),N是list長度,M是刪除的個數。如果count>0,從左往右刪:

????????如果count<0,從右往左刪:

????????如果count==0,刪除全部滿足value==element的元素:

6 ltrim和lset

????????命令:ltrim key start end

????????保留[start,end]的元素,其余的全部刪除。時間復雜度O(N),N是list長度。

????????命令:lset key index element

????????把下標index的元素修改為element。時間復雜度O(N),N是list長度。如果下標越界則報錯。

7 blpop和brpop

????????blpop和brpop是lpop和rpop的阻塞版本,即當list為空時,執行blpop和brpop會阻塞(在此期間redis服務器可以執行其他命令),直到超出設置的阻塞時間或list不空;如果list不空,執行效果就如同lpop和rpop。

????????blpop和brpop命令可以同時指定多個key,從左向右遍歷key,只要有一個key的list彈出元素,就視為執行成功,命令立即返回。

????????如果多個客戶端并發對一個key執行blpop或brpop,在list為空時,如果阻塞時間內list有新元素,則會優先給最先執行的命令返回元素。

????????命令:blpop key1 key2 ... timeout

????????返回值是二元組,包括哪個key和對應彈出的元素。

????????當list6和list7都沒有元素了,此時再執行命令就會阻塞,直到其他客戶端使用相關命令向list6或list7插入元素。

????????31.63s表示阻塞的時間。brpop命令類似,不再演示。

????????注意:timeout在redis 5設置時必須是整數的秒,但是redis 6以后就引入了小數的秒。

8 list的使用場景

????????list最常用于多個同屬于一個元素的值的存儲(一對多場景),比如一個班級有多個學生。還有個作用是作為消息隊列使用:消息隊列需要使用阻塞隊列作為數據結構,而list的實現類似雙端隊列,提供兩端的存和取。利用lpush和brpop(需要用到阻塞),可以實現生產者往阻塞隊列放元素,消費者取元素,如果沒有元素可取就阻塞等待。

????????在分布式系統中,往往需要解耦。對消息的傳遞也可以解耦,即利用多個頻道,每個頻道傳遞不同的消息,生產者負責往不同頻道寫消息,消費者負責從多個不同頻道讀消息,這里的多個頻道就是多個list。

下篇文章:

Redis數據類型之sethttps://blog.csdn.net/sniper_fandc/article/details/149139848?fromshare=blogdetail&sharetype=blogdetail&sharerId=149139848&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88634.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在 Windows 上安裝和配置 Kafka

消息代理是一種軟件&#xff0c;充當在不同應用程序之間發送消息的中介。它的功能類似于服務器&#xff0c;從一個應用程序&#xff08;稱為生產者&#xff09;接收消息&#xff0c;并將其路由到一個或多個其他應用程序&#xff08;稱為消費者&#xff09;。消息代理的主要目的…

FPGA實現SDI轉LVDS視頻發送,基于GTP+OSERDES2原語架構,提供工程源碼和技術支持

目錄 1、前言工程概述免責聲明 2、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目本博已有的 SDI 編解碼方案FPGA實現LVDS視頻收發方案 3、工程詳細設計方案工程設計原理框圖SDI 輸入設備Gv8601a 均衡器GTP 高速接口-->解串SMPTE SD/HD/3G SDI IP…

uniapp+vue3項目實現:H5的文件預覽、文件下載功能(文章參考)

uniappvue3項目實現&#xff1a;H5的文件預覽、文件下載功能&#xff08;文章參考&#xff09; 文章參考&#xff1a; uniapp的移動端h5實現文件下載兼容手機各版本瀏覽器 uni-app之微信小程序實現‘下載保存至本地預覽’功能 uniapp&#xff1a;h5和微信小程序文件下載方式

汽車功能安全-軟件單元驗證 (Software Unit Verification)【定義、目的、要求建議】6

文章目錄1 軟件單元驗證 (Software Unit Verification)2 ISO 26262-6對單元驗證的實施要求和建議2.1 要求和建議2.2 通俗易懂的解釋與總結2.3 示例2.3.1 場景1&#xff1a;電動助力轉向系統 (EPS)2.3.2 場景2&#xff1a;自動緊急制動系統 (AEB)2.3.3 示例模型驗證2.4 核心要點…

提示工程:突破Transformer極限的計算科學

Why Prompt Design Matters and Works: A Complexity Analysis of Prompt Search Space in LLMs 提示工程如何從經驗技巧升級為系統科學 一、Transformer的先天缺陷:計算深度固化與信息丟失 原理 Transformer架構的計算能力存在固有局限: 計算深度固化:其隱狀態僅在層間…

【2025/07/11】GitHub 今日熱門項目

GitHub 今日熱門項目 &#x1f680; 每日精選優質開源項目 | 發現優質開源項目&#xff0c;跟上技術發展趨勢 &#x1f4cb; 報告概覽 &#x1f4ca; 統計項&#x1f4c8; 數值&#x1f4dd; 說明&#x1f4c5; 報告日期2025-07-11 (周五)GitHub Trending 每日快照&#x1f55…

LeetCode 278. 第一個錯誤的版本

LeetCode 278. 第一個錯誤的版本 解析 這個問題要求找到第一個錯誤的版本&#xff0c;其中給定一個 API isBadVersion(version) 可以判斷某個版本是否錯誤。由于版本號是有序的&#xff0c;且錯誤版本之后的所有版本都是錯誤的&#xff0c;因此可以使用二分查找高效地定位第一個…

【RK3568+PG2L50H開發板實驗例程】FPGA部分 | Pango 的時鐘資源——鎖相環

本原創文章由深圳市小眼睛科技有限公司創作&#xff0c;版權歸本公司所有&#xff0c;如需轉載&#xff0c;需授權并注明出處&#xff08;www.meyesemi.com) 1.實驗簡介 實驗目的&#xff1a; 了解 PLL IP 的基本使用方法。 實驗環境&#xff1a; Window11 PDS2022.2-SP6.4…

Graph Contrastive Learning with Generative Adversarial Network基于生成對抗網絡的圖對比學習

1. 什么是圖&#xff1f;&#xff08;Graph&#xff09;想象一下社交網絡&#xff0c;每個人是一個“點”&#xff08;節點&#xff09;&#xff0c;他們之間的朋友關系是“線”&#xff08;邊&#xff09;。這樣的點和線組成的結構就是“圖”。在計算機科學中&#xff0c;圖被…

PyTorch中的torch.argmax()和torch.max()區別

在PyTorch中&#xff0c;torch.argmax()和torch.max()都是針對張量操作的函數&#xff0c;但它們的核心區別在于返回值的類型和用途&#xff1a;1. torch.argmax() 作用&#xff1a;僅返回張量中最大值所在的索引位置&#xff08;下標&#xff09;。返回值&#xff1a;一個整數…

WebSocket主從服務器架構完整教程

目錄 1. 前言:為什么要學習WebSocket主從架構 第一章:基礎知識準備 2.1 什么是WebSocket 生活中的例子 技術特點 2.2 WebSocket vs HTTP 什么時候用WebSocket? 2.3 什么是主從架構 生活中的例子 技術架構圖 2.4 環境準備 需要的軟件 項目結構 第二章:WebSock…

Java的extends通配符

在Java泛型中&#xff0c;extends通配符用于限定泛型類型的上界&#xff0c;即指定泛型可以是某個類型或其子類型。它有兩種常見用法&#xff1a;類型參數限定和通配符限定&#xff0c;下面詳細介紹&#xff1a; 1. 類型參數限定&#xff08;在類/方法定義中&#xff09; 在定義…

vue自定義提示框組件

不想要elementui的消息提示&#xff0c;自定義一個組件系統統一使用 一、寫頁面 vue &#xff08;我放的目錄是src/plugins/message.vue&#xff09;&#xff08;這里面使用elementui 里面icon 需要單獨引入&#xff09; <template><Transition name"down"&…

自動駕駛數據集綜述:統計特征、標注質量與未來展望

自動駕駛數據集綜述&#xff1a;統計特征、標注質量與未來展望 A Survey on Autonomous Driving Datasets: Statistics, Annotation Quality, and a Future Outlook 得益于硬件和深度學習技術的快速進步&#xff0c;自動駕駛近年來迅速發展并展現出良好的性能。高質量的數據集…

redis數據結構和數據類型

1.動態字符串SIMPLE DYNAMIC STRING(SDS)觀察上圖中的SDS結構&#xff0c;頭部包含字符串長度和分配的空間&#xff0c;可以以O&#xff08;1&#xff09;的時間復雜度計算出字符串長度&#xff0c;并且有了字符串長度后可以無視c語言的字符串缺陷&#xff08;\0作為結尾標識&a…

深度學習--神經網絡

一、深度學習的簡單概念深度學習是一種模仿人類大腦的運行方式&#xff0c;從大量數據中學習特征的學習模式。深度學習是機器學習的子集&#xff0c;它與機器學習的關系如下&#xff1a;二、感知神經網絡2.1簡單定義神經網絡&#xff08;Neural Networks&#xff09;是一種模擬…

.NET 程序的強名稱簽名與安全防護技術干貨

在 .NET 開發領域&#xff0c;保障程序的安全性和完整性至關重要。強名稱簽名和有效的安全防護措施是實現這一目標的關鍵手段。下面將詳細介紹 .NET 程序的強名稱簽名以及相關的安全防護方法。一、什么是強名稱簽名強名稱簽名是 .NET 框架提供的一種安全機制&#xff0c;其主要…

DNS(Domain Name System,域名系統)

目錄 **一、DNS的核心功能****二、DNS的工作原理****1. 解析流程(以車載導航請求為例)****2. 關鍵機制****三、車載以太網中DNS的特殊性**1. **高可靠性要求**2. **低延遲優化**3. **安全挑戰與防護****四、DNS相關協議與技術****五、車載DNS配置示例****六、DNS故障排查工具…

優化 ECharts 多條折線:折線數據不完整導致的X軸日期錯亂問題

目錄 一、簡單介紹 1.1 常見類型 二、時間軸錯亂問題 2.1 示例 2.2 示例完整代碼 2.3 問題分析 2.4 修復方法 第一步 第二步 2.5 優化后完整代碼 一、簡單介紹 ECharts 是一款基于 JavaScript 的數據可視化圖表庫&#xff0c;動態圖表是 ECharts 的一個重要應用場景…

網絡安全之注入攻擊:原理、危害與防御之道

網絡安全之注入攻擊&#xff1a;原理、危害與防御之道 引言 在OWASP Top 10安全風險榜單中&#xff0c;注入攻擊常年占據首位。2023年Verizon數據泄露調查報告顯示&#xff0c;67%的Web應用漏洞與注入類攻擊直接相關。本文從技術視角系統解析注入攻擊的核心原理、典型場景及防御…