【Redis】 關于列表類型

文章目錄

  • 🍃前言
  • 🍀常見操作命令介紹
    • 🚩lpush
    • 🚩lpushx
    • 🚩rpush
    • 🚩rpushx
    • 🚩lrange
    • 🚩lpop
    • 🚩rpop
    • 🚩lindex
    • 🚩linsert
    • 🚩llen
    • 🚩lrem
    • 🚩ltrim
    • 🚩lset
  • 🌴阻塞版命令介紹
  • 🎄列表型的內部編碼
  • 🎋使用場景
    • 🚩消息隊列
  • ?總結

🍃前言

列表類型是?來存儲多個有序的字符串,列表中的每個字符串稱為元素(element),?個列表最多可以存儲 2的32次方-1 個元素。

在 Redis 中,可以對列表兩端插?(push)和彈出(pop),還可以獲取指定范圍的元素列表、獲取指定索引下標的元素等。

列表是?種?較靈活的數據結構,它可以充當棧和隊列的??,在實際開發上有很多應?場景。

列表類型有以下特點:

  • 第?、列表中的元素是有序的,這意味著可以通過索引下標獲取某個元素或者某個范圍的元素列表

  • 第?、區分獲取和刪除的區別,獲取與刪除都會獲得對應下標的值,但是刪除會改變列表長度

  • 第三、列表中的元素是允許重復的

對列表類型有了一個基本的了解后,接下來我們來看看Redis中如何操作列表類型以及列表類型的內部編碼與使用場景

🍀常見操作命令介紹

🚩lpush

將?個或者多個元素從左側放?(頭插)到 list 中。

語法:

lpush key element [element ...]

時間復雜度:

  • 只插??個元素為O(1),插?多個元素為O(N), N 為插?元素個數.

返回值:

  • 插?后 list 的?度

在這里插入圖片描述

🚩lpushx

在 key 存在時,將?個或者多個元素從左側放?(頭插)到 list 中。不存在,直接返回

語法:

lpushx key element [element ...]

時間復雜度:

  • 只插??個元素為O(1),插?多個元素為O(N),N為插?元素個數.

返回值:

  • 插?后 list 的?度。

在這里插入圖片描述

🚩rpush

將?個或者多個元素從右側放?(尾插)到 list 中

語法:

rpush key element [element ...]

時間復雜度:

  • 只插??個元素為 O(1),插?多個元素為 O(N), N 為插?元素個數.

返回值:

  • 插?后 list 的?度。

在這里插入圖片描述

🚩rpushx

在 key 存在時,將?個或者多個元素從右側放?(尾插)到 list 中。

語法:

rpushx key element [element ...]

時間復雜度:

  • 只插??個元素為 O(1), 插?多個元素為 O(N), N 為插?元素個數.

返回值:

  • 插?后 list 的?度。

在這里插入圖片描述

🚩lrange

獲取從 start 到 end 區間的所有元素,左閉右閉。

語法:

lrange key start stop

時間復雜度:

  • O(N)

返回值:

  • 指定區間的元素

在這里插入圖片描述

🚩lpop

從 list 左側取出元素(即頭刪)

語法:

lpop key

時間復雜度:

  • O(1)

返回值:

  • 取出的元素或者nil。

在這里插入圖片描述

🚩rpop

從 list 右側取出元素(即尾刪)。

語法:

rpop key

時間復雜度:

  • O(1)

返回值:

  • 取出的元素或者 nil

在這里插入圖片描述

🚩lindex

獲取從左數第 index 位置的元素

語法:

lindex key index

時間復雜度:

  • O(N)

返回值:

  • 取出的元素或者nil。

在這里插入圖片描述

🚩linsert

在特定位置插入元素

語法:

linsert key <BEFORE | AFTER> pivot element

時間復雜度:

  • O(N)

返回值:

  • 插?后的 list ?度
    在這里插入圖片描述

🚩llen

獲取 list 的長度

語法:

llen key

時間復雜度:

  • O(1)

返回值:

  • list的?度。

在這里插入圖片描述

🚩lrem

從左往右刪除指定個數(count)的 value

語法:

lrem key count value

時間復雜度

  • O(k),k為list所存在value與count中的最小值

返回值:

  • 返回刪除list的長度

在這里插入圖片描述

🚩ltrim

刪除除指定字段外的所有值

語法:

ltrim key start end

時間復雜度:

  • O(k),k為所刪除list的長度

返回值:

  • ok

在這里插入圖片描述

🚩lset

修改指定位置的值

語法:

lset key index value

時間復雜度:

  • O(1)

返回值:

  • ok

在這里插入圖片描述

🌴阻塞版命令介紹

blpop 和 brpop 是 lpop 和 rpop 的阻塞版本,和對應?阻塞版本的作?基本?致,除了:

  • 在列表中有元素的情況下,阻塞和?阻塞表現是?致的。但如果列表中沒有元素,?阻塞版本會理解返回 nil,但阻塞版本會根據 timeout,阻塞?段時間,期間 Redis 可以執?其他命令,但要求執?該命令的客?端會表現為阻塞狀態。
  • 命令中如果設置了多個鍵,那么會從左向右進?遍歷鍵,?旦有?個鍵對應的列表中可以彈出元素,命令?即返回。
  • 如果多個客?端同時多?個鍵執? pop,則最先執?命令的客?端會得到彈出的元素。

接下來演示以下用法:

首先準備兩個客戶端
在這里插入圖片描述

客戶端1 準備一個列表數據如下

在這里插入圖片描述

然后客戶端2 使用阻塞版命令進行獲取

在這里插入圖片描述

獲取玩列表元素后,再次進行獲取:

首先使用非阻塞版本的 rpop 進行獲取

在這里插入圖片描述

其次使用阻塞版本的 brpop 進行獲取,出現阻塞

在這里插入圖片描述

接下來,使用客戶端一,向隊列添加元素:

在這里插入圖片描述

我們就可以看到阻塞版命令與普通命令的差別了

🎄列表型的內部編碼

列表類型的內部編碼有兩種:

  • ziplist(壓縮列表):當列表的元素個數?于 list-max-ziplist-entries 配置(默認 512 個),同時列表中每個元素的?度都?于 list-max-ziplist-value 配置(默認 64 字節)時,Redis會選? ziplist 來作為列表的內部編碼實現來減少內存消耗。

  • linkedlist(鏈表):當列表類型?法滿? ziplist 的條件時,Redis 會使? linkedlist 作為列表的內部實現

🎋使用場景

🚩消息隊列

Redis 可以使? lpush + brpop 命令組合實現經典的阻塞式?產者-消費者模型隊列,?產者客?端使? lpush 從列表左側插?元素,多個消費者客?端使? brpop 命令阻塞式地從隊列中"爭搶" 隊?元素,通過多個客?端來保證消費的負載均衡和?可?性。

而且還可以通過用不同的鍵模擬頻道的概念,不同的消費者可以通過brpop不同的鍵值,實現訂閱不同頻道的理念。

?總結

關于《【Redis】 關于列表類型》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關注,點贊,收藏支持一下

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

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

相關文章

“按摩”科技?

都說A股股民是特別善于學習的&#xff0c;這不市場又現新概念——“按摩科技”&#xff0c;成立僅6年&#xff0c;把上門按摩干到35億營收也是沒誰了&#xff0c;現在號稱有1000萬用戶&#xff0c;3萬家入駐商戶數的按摩平臺&#xff0c;難道就憑借2.5萬名女技師&#xff0c;活…

【Django】中間件實現鉤子函數預處理和后處理,局部裝飾視圖函數

在app文件夾里新建middleware.py繼承MiddlewareMixin&#xff0c; 編寫中間件類&#xff0c;重寫process_request、process_response鉤子函數 from django.http import HttpRequest, HttpResponse from django.utils.decorators import decorator_from_middleware from django…

關于pytest中用例名稱使用中文亂碼的解決

場景&#xff1a;使用pytest.mark.parametrize裝飾器為用例自定義名稱時&#xff0c;運行顯示亂碼。如下圖所示&#xff1a; 解決方案&#xff1a; 1.在根目錄 pytest.ini中增加一行代碼 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_supportTrue…

NAT 網絡轉換

NAT(Network Address Translation) 網絡地址轉換 0x01 NAT 簡介 為什么要使用 NAT IPv4 網絡地址緊缺&#xff0c;從而出現了私有網段&#xff0c;來補充地址&#xff0c;但私有網段不課訪問 internet 所以出現了 NAT 地址轉換&#xff0c;將私有地址&#xff0c;轉換為公網 I…

一口氣看完es(上)

此系列博客分為上中下3篇&#xff1a;上篇是關于es的概念和對數據的增刪改操作&#xff0c;中篇是對數據的查詢、對搜索結果進行處理操作&#xff0c;下篇是介紹怎么在Java代碼中調用和操作es。 基本概念 1、es是什么&#xff1f;有什么作用&#xff1f; es全名是elasticsea…

關于0成本部署個人博客

分享一個文章關于零成本搭建個人博客 參考&#xff1a;‘關于部署博客hexoshokagithub的流程以及問題’ - 關于博客部署 | XiaoYang Guo Welcome to Guo Xiaoyangs personal blog 歡迎來到郭曉陽的個人博客 (1330303.github.io) 這個博主講的流程很全&#xff0c;而且回答也…

智慧管廊巡檢運維解決方案

一、智慧管廊巡檢行業目前存在的挑戰和難題 智慧管廊巡檢行業面臨著運行環境的客觀影響&#xff0c;如地面施工、液體滲漏、通風不佳、內部空間受限等問題。而管廊巡檢機器人系統的出現卻具有重大意義。它能夠有力地保障管廊安全且可靠地運行&#xff0c;在面對火情、災情等緊…

springboot基礎篇(快速入門+要點總結)

目錄 一、SpringBoot簡介 二、創建SpringBoot&#xff08;通過Idea腳手架搭建項目&#xff09; 三、properties配置文件 properties 配置文件說明 ①. properties 基本語法 ②. 讀取配置?件 ③. properties 缺點 2. yml 配置?件說明 ①. yml 基本語法 ②. yml 使用進…

上海AI lab發布MathBench,GPT-4o的數學能力有多強?

大模型數學能力哪家強&#xff1f; 最近&#xff0c;上海AI lab構建了一個全面的多語言數學基準——MathBench。與現有的基準不同的是&#xff0c;MathBench涵蓋從小學、初中、高中、大學不同難度&#xff0c;從基礎算術題到高階微積分、統計學、概率論等豐富類別的數學題目&a…

React項目知識積累(五)

1.dispatch、dev派發 src/models/formStatus.js: const FromStatusModel {namespace: "fromStatus",state: {isDisable: false,},reducers: {saveIsDisable(state, { payload }) {return {...state,...payload,};},}, };export default FromStatusModel; 改變和提…

【Linux】升級make(版本4.4.1)、升級gdb(版本14.1)、升級autoconf(版本2.71)

centos7升級make&#xff08;版本4.4.1&#xff09;&#xff1a; make&#xff1a;編譯和構建工具。Linux中很多軟件包需要make編譯構建。官網&#xff1a;Make - GNU Project - Free Software Foundation 本次升級前的make版本是3.82&#xff0c;準備安裝的版本是4.4.1。make…

【Delphi 開箱即用 4】動態切換主題皮膚(明亮 or 暗黑)

Delphi的原始窗口界面看起來并不夠吸引人。嘗試下載并安裝第三方皮膚可能會導致應用程序尺寸急劇增加&#xff0c;并且可能會出現不穩定的情況。事實上&#xff0c;Delphi自帶了皮膚功能&#xff0c;完全可以滿足我們對窗口界面的美化需求&#xff0c;并且還支持動態切換皮膚。…

Hive的Sort by Order by Distribute by Cluster by

sort by是分區內排序&#xff0c;一個Reduce對一個Map的數據排序&#xff0c;效率高。 order by是全局排序&#xff0c;一個Reduce對所有Map內的數據排序&#xff0c;效率低。 distribute by 是對數據分區&#xff0c;根據字段哈希值取模來劃分到不容的MR內。注意哈希碰撞 哈…

Python I/O操作筆記

打開文件&#xff1a; 使用 open() 函數&#xff0c;其中文件路徑可以是相對路徑或絕對路徑。 模式除了常見的 r&#xff08;只讀&#xff09;、w&#xff08;寫入&#xff0c;會覆蓋原有內容&#xff09;、a&#xff08;追加&#xff09;外&#xff0c;還有一些其他組合模式&…

基于springboot實現旅游管理系統項目【項目源碼+論文說明】計算機畢業設計

基于springboot實現旅游管理系統演示 摘要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本旅游管理系統就是在這樣的大環境下誕生&#xff0c;其可以幫助使用者在…

周報 | 24.5.20-24.5.26文章匯總

為了更好地整理文章和發表接下來的文章&#xff0c;以后每周都匯總一份周報。 OpenCV與AI深度學習 | YOLOv8自定義數據集訓練實現火焰和煙霧檢測&#xff08;代碼數據集&#xff01;&#xff09;-CSDN博客 周報 | 24.5.13-24.5.19文章匯總-CSDN博客 DeepDriving | 目標檢測中…

來自Java的“菱形繼承“,你聽說過嗎?

一、菱形繼承的概念 菱形繼承又叫做鉆石繼承&#xff0c;指的是不同的類同時繼承自相同的父類&#xff0c;存在一個子類同時繼承這些不同的類&#xff0c;即我們常說的“多繼承”問題。 例如&#xff1a;B類和C類分別繼承A類&#xff0c;而D類同時繼承B類和C類。 如此圖所示 二…

Oladance、韶音、南卡開放式耳機選哪個?2024年主流產品硬核測評!

近期&#xff0c;不少朋友向我咨詢關于挑選開放式耳機的建議&#xff0c;希望找到既適合自己又具有高品質的選項。鑒于市場上開放式耳機品牌繁多&#xff0c;每款產品在音質、佩戴感受及整體性能上的表現各有千秋&#xff0c;正確選擇一款耳機成為了音樂愛好者們關注的焦點。錯…

R繪圖學習筆記

1、R語言繪制海岸線邊界 參考&#xff1a; Drawing beautiful maps programmatically with R, sf and ggplot2 — Part 1: Basics 使用R繪制世界地圖及緯度統計圖 Drawing maps with R. A basic tutorial&#xff1a;https://dr2blog.hcommons.org/2020/03/23/drawing-maps-wit…

【408精華知識】指令字長、存儲字長、機器字長大總結!

文章目錄 一、三種字長二、三種字長之間的關系三、三種字長與部件位數之間的關系 一、三種字長 機器字長&#xff1a;等于字長&#xff0c;CPU一次能夠處理的數據的位數。通常等于寄存器、ALU的位數。例子&#xff1a;windows 64位/32位&#xff0c;這里的64位和32位指的就是該…