list.

列表類型是用來存儲多個有序的字符串,列表中的每個字符串稱為元素(element),?個列表最多可以存儲個元素
在 Redis 中,可以對列表兩端插入(push)和彈出(pop),還可以獲取指定范圍的元素列表、?獲取指定索引下標的元素等。列表是?種比較靈活的數據結構,它可以充當棧和隊列的角色
列表(list)相當于是 數組 或者 順序表
list 內部編碼方式并非是一個簡單的數組,而是更接近于“雙端隊列”(deque)
列表中的元素是有序的(元素位置),允許插入重復元素

常見命令

1)lpush? lpushx? rpush? rpushx

lpush key element [element ...]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? —— 頭插

返回 list 的長度? O(1)

lpushx?key element [element ...]

當 key 存在是返回 list 的長度,否則直接返回? O(1)?? ? ? ? ? ? ? ? ?—— 頭插

rpush key element [element ...]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?—— 尾插

返回 list 的長度? O(1)

rpush key element [element ...]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? —— 尾插

當 key 存在是返回 list 的長度,否則直接返回? O(1)?

若果 key 已經存在,并且 key 對應的 value 類型不是 list,此時會報錯

2)lrange

獲取從 start 到 end 區間內的所有元素(左閉右閉)

lrange key start end? (支持負數)

返回指點區間內的元素? O(N)

此處 數字 只是標識返回元素的順序(結果集),和下標無關

當給出非法下標時,Redis 會盡可能的取到給定區間內的元素(魯棒性)

3)lpop? rpop

lpop key [count]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?—— 頭刪

返回指定區間內的元素或者 nil? O(count)

rpop key [count]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?—— 尾刪

返回指定區間內的元素或者 nil? O(count)

Redis 中的 list 是一個雙端隊列,從兩頭插入/刪除是非常高效的? O(1)

rpush + lpop ——> 隊列

rpush + rpop ——> 棧

4)lindex

lindex key index

返回指定下表的元素 ,非法下標則返回 nil? O(N)

正數表示從左數,負數反之,起始點為 0

5)linsert

linsert key <before | after> pivot element

返回插入后的 list 的長度? O(N)

pivot? 基準值(從左往右)? ? element? 要插入的元素

6)len

len key

返回 list 的長度? O(1)

7)lrem

lrem key count element

返回刪除的元素個數? O(1)

count? 要刪除的元素的個數? ? ? ?element? 要刪除的元素的值

8)ltrim?

ltrim key count element

返回 ok? O(N)

保留 start 和 stop 區間內的元素(區間外的被直接刪除)

9)lset

lset key index element

返回 OK,若下表越界返回 nil? O(1)

10)blpop? brpop

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

blpop key [key ...] timeout? ? ? ? ? ? ? ? ? ?—— 尾刪

返回取出的元素或者 nil? O(1)

brpop key [key ...] timeout? ? ? ? ? ? ? ? ? ?—— 尾刪

返回取出的元素或者 nil? O(1)

返回結果相當于是一個pair(二元組)

一方面表示當前數據來自哪個 key? ? ? ? ??

一方面表示取到的數據是什么

生產者—消費者模型? —— BlockingQueue

使用隊列作為中間的“交易場所”(broker)

1.線程安全

2.隊列為空,嘗試出隊列,產生阻塞,直到隊列不空,阻塞解除

? ?隊列為滿,嘗試入隊列,產生阻塞,直到隊列不滿,阻塞解除

Redis 的 list 也相當于 阻塞隊列

線程安全 —— 單線程模型? ? ? ? 阻塞 —— 只支持“隊列為空”,不考慮“隊列滿”

顯示設置阻塞時間,此處不會對 Redis 服務器造成太大影響

可以同時去嘗試獲取多個鍵,一旦有一個鍵對應的列表中可以彈出元素,命令立即返回

命令如果設置了多個鍵,會從左向右進行遍歷,一旦有一個鍵對應的列表中可以彈出元素,命令立即返回

如果多個客戶端同時對一個鍵進行 blpop ,最先執行的客戶端會獲得元素

編碼方式

quecklist

相當于是 鏈表 和 壓縮列表 的結合

整體還是一個列表,鏈表的每個節點,是一個壓縮列表

每個壓縮列表都不太大,同時再把多個壓縮列表通過鏈表結構連起來

ziplist(壓縮列表)

把數據按照更緊湊的形式進行表示。

節省空間,但是數個數多了,操作效率會下降

linkedlist(鏈表)

應用場景

消息隊列

使用 lpush + brpop 組合實現 生產者-消費者?模型,在通過多個客戶端保證負載均衡和高可用性

如果列表為空,生產出的下個元素只有一個消費者可以“搶到”元素

分頻道的消息隊列

如果頻道為空,生產出的下個元素只有一個消費者可以“搶到”元素

多個頻道,可以在某種數據發生異常時,不會對其他數據造影響(解耦合)

微博 TimeLine

每個用戶都有屬于自己的 TimeLine(微博列表)

當需要分頁展示文章列表時,可以使用 list (list不僅有序,還支持按照索引范圍獲取元素)

1.)當前一頁中的有多少數據是不確定的,可能會導致下面的循環比較大,從而出發多次 hgetall(多次網絡請求)

pipeline (流水線\管道)把多個 Redis 命令合并成一次 網絡請求進行通信,降低服務器與客戶端的通信次數

2)分裂獲取文章時,lrange 在列表兩端表現比較好,獲取列表中間的元素表現比較差,可以將列表進行拆分

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

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

相關文章

關于Diamond機械手的運動學與動力學的推導

1.關于Diamond機械手 &#xff08;1&#xff09;位置模型推導 逆解&#xff1a;機械末端平臺的位置與驅動關節之間的關系。 設p點在xy平面的坐標是&#xff08;x&#xff0c;y&#xff09;T&#xff0c;此時根據向量求解 OP等于向量r等于e向xy軸的向量主動臂長度向xy軸的向量…

如何新建一個空分支(不繼承 master 或任何提交)

一、需求分析&#xff1a; 在 Git 中&#xff0c;我們通常通過 git branch 來新建分支&#xff0c;這些分支默認都會繼承當前所在分支的提交記錄。但有時候我們希望新建一個“完全干凈”的分支 —— 沒有任何提交&#xff0c;不繼承 master 或任何已有內容&#xff0c;這該怎么…

Flask(補充內容)配置SSL 證書 實現 HTTPS 服務

沒有加密的http服務&#xff0c;就像在裸泳&#xff0c;鉆到水里便將你看個精光。數據在互聯網上傳輸時&#xff0c;如果未經加密&#xff0c;隨時可能被抓包軟件抓住&#xff0c;里面的cookie、用戶名、密碼什么的&#xff0c;它會看得一清二楚&#xff0c;所以&#xff0c;只…

云服務器CVM標準型S5實例性能測評——2025騰訊云

騰訊云服務器CVM標準型S5實例具有穩定的計算性能&#xff0c;CPU采用采用 Intel Xeon Cascade Lake 或者 Intel Xeon Cooper Lake 處理器&#xff0c;主頻2.5GHz&#xff0c;睿頻3.1GHz&#xff0c;CPU內存配置2核2G、2核4G、4核8G、8核16G等配置&#xff0c;公網帶寬可選1M、3…

什么是智算中心

智算中心是一種專門為智能計算提供強大算力支持的基礎設施&#xff0c;以下是關于它的詳細介紹&#xff1a; 定義與功能 智算中心是基于強大的計算能力&#xff0c;特別是針對人工智能算法進行優化的計算中心。它集成了大量的高性能計算設備&#xff0c;如 GPU 集群、FPGA 陣…

注意力機制是如何實現的

注意力機制的實現可以分解為幾個核心步驟&#xff0c;其本質是通過動態計算權重&#xff0c;決定不同位置信息的重要性&#xff0c;再對信息進行加權融合。以下從數學原理、代碼實現到直觀解釋逐步展開&#xff1a; 一、核心實現步驟 以最常見的**點積注意力&#xff08;Dot-P…

【裁員感想】

裁員感想 今天忽然感覺很emo 因為知道公司要裁員 年中百分之10 年末百分十10 我知道這個百分20會打到自己 所以還挺不開心的 我就想起 我的一個親戚當了大學老師 我覺得真的挺好的 又有寒暑假 又不是很累 薪資也不低 又是編制 同時也覺得自己很失敗 因為對自己互聯網的工作又…

從信號處理角度理解圖像處理的濾波函數

目錄 1、預備知識 1.1 什么是LTI系統? 1.1.1 首先來看什么是線性系統,前提我們要了解什么是齊次性和疊加性。

目標檢測概述

為什么基于卷積網絡的目標檢測模型在預測后要使用非極大值抑制 基于卷積網絡的目標檢測模型可能會在目標的相鄰區域生成多個相互重疊框&#xff0c;每個框的預測結果都是同一個目標&#xff0c;引起同一目標的重復檢測。造成這一現象的原因主要有兩個&#xff0c; 基于卷積網絡…

【JAVA】在idea新加artifact時,點擊Build-Build Artifacts時,新加的artifact不能選中

首先保證添加artifact無問題&#xff0c;比如依賴都正確、無重復命令的情況等 辦法 一 File > Invalidate Caches / Restart。 重啟IDEA后&#xff0c;重新檢查Artifact是否可選 辦法 二 打開 Project Structure&#xff08;CtrlShiftAltS&#xff09;。 進入 Artifacts 選…

Paramiko 使用教程

目錄 簡介安裝 Paramiko連接到遠程服務器執行遠程命令文件傳輸示例 簡介 Paramiko 是一個基于 Python 的 SSH 客戶端庫&#xff0c;它提供了在網絡上安全傳輸文件和執行遠程命令的功能。本教程將介紹 Paramiko 的基本用法&#xff0c;包括連接到遠程服務器、執行命令、文件傳輸…

《TCP/IP網絡編程》學習筆記 | Chapter 24:制作 HTTP 服務器端

《TCP/IP網絡編程》學習筆記 | Chapter 24&#xff1a;制作 HTTP 服務器端 《TCP/IP網絡編程》學習筆記 | Chapter 24&#xff1a;制作 HTTP 服務器端HTTP 概要理解 Web 服務器端無狀態的 Stateless 協議請求消息&#xff08;Request Message&#xff09;的結構響應消息&#x…

【Quest開發】在虛擬世界設置具有遮擋關系的透視窗口

軟件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 僅針對urp管線 參考了YY老師這篇&#xff0c;可以先看他的再看這個可能更好理解一些&#xff1a;Unity Meta Quest MR 開發&#xff08;七&#xff09;&#xff1a;使…

GPU 招投標全流程分析與總結

GPU 招投標全流程分析與總結 招投標流程概述 以下是通過代理商采購Nvidia H20-GPU 141G的招投標全流程分析: #mermaid-svg-hMPPfkCpGj8GKXfV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hMPPfkCpGj8GKXfV .er…

[C++] STL中的向量容器<vector>附加練習

目錄 講在前面(必看)八卦陣題目描述輸入格式輸出格式輸入輸出樣例數據范圍AC代碼及要點 決賽應援題目描述輸入格式輸出格式輸入輸出樣例數據范圍AC代碼及要點 講在前面(必看) 本篇為練習篇, vector講解篇在這里. 菜鳥食用前請做好心理準備(你懂的) 八卦陣 題目描述 n 名同學…

基于SpringBoot+Vue3實現的寵物領養管理平臺功能一

一、前言介紹&#xff1a; 1.1 項目摘要 隨著社會經濟的發展和人們生活水平的提高&#xff0c;越來越多的人開始關注并參與到寵物領養中。寵物已經成為許多家庭的重要成員&#xff0c;人們對于寵物的關愛和照顧也日益增加。然而&#xff0c;傳統的寵物領養流程存在諸多不便&a…

parameter和localparam的區別(verilog中)

在Verilog中&#xff0c;parameter 和 localparam 都用于定義常量&#xff0c;但是它們之間有一些重要的區 作用范圍&#xff1a; parameter&#xff1a;可以在模塊外部被修改或重定義。它可以被作為模塊的參數傳遞給其他模塊&#xff0c;因此具有較廣泛的作用范圍&#xff0c;…

鴻蒙API15 “一多開發”適配:解鎖黃金三角法則,開啟高效開發新旅程

一、引言 在萬物互聯的時代浪潮中&#xff0c;鴻蒙操作系統以其獨特的 “一多開發” 理念&#xff0c;為開發者打開了一扇通往全場景應用開發的新大門。“一多開發”&#xff0c;即一次開發&#xff0c;多端部署 &#xff0c;旨在讓開發者通過一套代碼工程&#xff0c;就能高效…

Linux中docker容器拉取鏡像失敗解決方案

查看 /etc/systemd/system/docker.service.d/http-proxy.conf 文件&#xff08;沒有則新建&#xff09;&#xff0c;查看自定義 Docker 服務的代理設置 輸入內容 [Service] Environment"HTTP_PROXYsocks5://10.211.13.214:7890" Environment"HTTPS_PROXYsocks…

半導體設備通信標準—secsgem v0.3.0版本使用說明文檔(2)之GEM(SEMI 30)

文章目錄 1、處理器1.1、事件 2、GEM 合規性2.1、狀態模型2.2、 設備加工狀態2.3、 文檔2.4、 控制 &#xff08;作員啟動&#xff09;2.5、 動態事件報告配置2.6、 跟蹤數據收集2.7、 報警管理2.8、 遠程控制2.9、 設備常量2.10、 工藝配方管理2.11、 物料移動2.12、 設備終端…