欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis常見數(shù)據(jù)類型List列表使用詳解

 更新時(shí)間:2024年12月07日 14:59:37   作者:呼啦啦啦啦啦啦啦啦  
Redis的List是一種有序的字符串集合,支持兩端高效插入和刪除,適用于隊(duì)列和棧,這篇文章主要介紹了Redis常見數(shù)據(jù)類型List列表使用的相關(guān)資料,需要的朋友可以參考下

前言

在 Redis 中,List 是一種非常常見的數(shù)據(jù)類型,用于表示一個(gè)有序的字符串集合。與傳統(tǒng)的鏈表結(jié)構(gòu)類似,Redis 的 List 支持在兩端進(jìn)行高效的插入和刪除操作,因此非常適合實(shí)現(xiàn)隊(duì)列(Queue)和棧(Stack)等數(shù)據(jù)結(jié)構(gòu)。

Redis List 的基本概念

  • 有序的字符串集合:List中的元素按插入順序排列,每個(gè)元素都是一個(gè)字符串。
  • 雙端隊(duì)列:Redis List 是一個(gè)雙端隊(duì)列(Deque),允許你在列表的兩端高效地進(jìn)行操作(插入和刪除)。
  • 最大長(zhǎng)度:Redis 的 List 數(shù)據(jù)類型沒有最大長(zhǎng)度限制,理論上可以存儲(chǔ)無限多的元素,除非內(nèi)存不足。

List命令:

LPUSH

LPUSH 命令用于將一個(gè)或多個(gè)元素插入到列表的頭部(即左側(cè))。如果列表不存在,Redis 會(huì)自動(dòng)創(chuàng)建一個(gè)空列表并執(zhí)行插入操作。

語法: LPUSH key value [value ...] 

127.0.0.1:6379> lpush key 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange key 0 -1
1) "4"
2) "3"
3) "2"
4) "1"

返回值

  • 返回插入元素后的列表長(zhǎng)度。

LPUSHX 

LPUSHX 是一個(gè)用于將元素推入到列表(list)頭部的命令,但與 LPUSH 不同的是,LPUSHX 只有在列表已存在的情況下才會(huì)執(zhí)行操作。如果列表不存在,LPUSHX 不會(huì)做任何操作,也不會(huì)創(chuàng)建新的列表。 

語法:LPUSHX key value

127.0.0.1:6379> lpush key world
(integer) 1
127.0.0.1:6379> lpushx key hello 
(integer) 2
127.0.0.1:6379> lpushx key2 hi 
(integer) 0
127.0.0.1:6379> lrange key 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> lrange key2 0 -1
(empty array)

總結(jié):

LPUSHX 用于將元素添加到已經(jīng)存在的列表中,它不會(huì)創(chuàng)建新的列表,這與 LPUSH(無論列表是否存在都創(chuàng)建新列表)有所不同。

 RPUSH

RPUSH 命令用于將一個(gè)或多個(gè)元素插入到列表的尾部(即右側(cè))。如果列表不存在,Redis 會(huì)自動(dòng)創(chuàng)建一個(gè)空列表并執(zhí)行插入操作。

語法:RPUSH key value [value ...] 

127.0.0.1:6379> rpush key 1 2 3 4
(integer) 4
127.0.0.1:6379> rpush key 5 6 7 8
(integer) 8
127.0.0.1:6379> lrange key 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"

返回值:

  • 返回插入元素后的列表長(zhǎng)度。

RPUSHX 同理 LPUSHX

LRANGE

LRANGE 命令用于獲取列表中的一個(gè)指定范圍的元素。你可以指定開始和結(jié)束的索引位置,然后 Redis 會(huì)返回該范圍內(nèi)的所有元素。

語法:LRANGE key start stop

127.0.0.1:6379> lrange key 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
127.0.0.1:6379> lrange key 0 3
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> lrange key 0 100
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
127.0.0.1:6379> lrange key 8 10
(empty array)
127.0.0.1:6379> lrange key -8 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"

返回值:

  • 返回指定范圍內(nèi)的所有元素。如果范圍超出列表長(zhǎng)度,Redis 會(huì)返回所有符合范圍條件的元素。

總結(jié):

  • LRANGE 用于獲取 Redis 列表中指定范圍的元素。
  • 支持負(fù)數(shù)索引,可以從列表尾部獲取元素。
  • 如果 start 和 stop 超出了列表的實(shí)際長(zhǎng)度,Redis 會(huì)自動(dòng)調(diào)整范圍。

LPOP

LPOP 命令用于從列表的頭部(左側(cè))移除并返回一個(gè)元素。執(zhí)行該命令時(shí),列表的第一個(gè)元素會(huì)被移除,并返回這個(gè)被移除的元素。如果列表為空,LPOP 會(huì)返回 nil。

語法:LPOP key

127.0.0.1:6379> rpush key 1 2 3 4
(integer) 4
127.0.0.1:6379> lpop key
"1"
127.0.0.1:6379> lpop key
"2"
127.0.0.1:6379> lpop key
"3"
127.0.0.1:6379> lpop key
"4"
127.0.0.1:6379> lpop key
(nil)

返回值:

  • 返回被移除的列表元素。
  • 如果列表為空,返回 nil

總結(jié):

LPOP 是一個(gè)用于從 Redis 列表左側(cè)移除并返回一個(gè)元素的命令。如果列表為空,返回 nil。

RPOP 同理 
 RPOP 命令用于從列表的尾部(右側(cè))移除并返回一個(gè)元素。執(zhí)行該命令時(shí),列表的最后一個(gè)元素會(huì)被移除,并返回該元素。如果列表為空,RPOP 會(huì)返回 nil

LINDEX

LINDEX 命令用于獲取列表中指定位置的元素。你可以通過指定一個(gè)索引來獲取列表中對(duì)應(yīng)位置的元素。

語法:LINDEX key index

127.0.0.1:6379> rpush key 1 2 3 4 5 6 7 8
(integer) 8
127.0.0.1:6379> lindex key 0
"1"
127.0.0.1:6379> lindex key 7
"8"
127.0.0.1:6379> lindex -1
127.0.0.1:6379> lindex key -1
"8"
127.0.0.1:6379> lindex key -7
"2"
127.0.0.1:6379> lindex key 9
(nil)

返回值:

        返回指定位置的元素。

        如果指定的索引超出了列表的范圍,返回 nil。

總結(jié):

LINDEX 用于獲取 Redis 列表中指定位置的元素??梢酝ㄟ^正數(shù)索引或負(fù)數(shù)索引來指定位置。如果索引超出范圍,返回 nil。這是一個(gè)讀取操作,而不會(huì)改變列表內(nèi)容

LINSERT

LINSERT 命令用于在列表中指定位置插入一個(gè)元素。你可以在列表的 左側(cè) 或 右側(cè) 插入元素,依據(jù)你指定的插入位置。語法:LINSERT key BEFORE|AFTER pivot element 

127.0.0.1:6379> rpush key a b c d
(integer) 4
127.0.0.1:6379> linsert key before b 111
(integer) 5
127.0.0.1:6379> linsert key after b 222
(integer) 6
27.0.0.1:6379> linsert key before e 333
(integer) -1
127.0.0.1:6379> lrange key 0 -1
1) "a"
2) "111"
3) "b"
4) "222"
5) "c"
6) "d"

返回值:

        如果操作成功,返回列表的新長(zhǎng)度。

        如果 pivot 元素在列表中不存在,則不插入任何元素,返回 -1。

總結(jié):

LINSERT 命令在 Redis 列表中指定位置插入一個(gè)新元素??梢栽谥付ㄔ氐?前 或 后 插入。它是一個(gè)修改列表的命令,成功執(zhí)行后返回新的列表長(zhǎng)度,如果指定的 pivot 元素不存在,則返回 -1。

 LLEN

LLEN 命令用于獲取列表的長(zhǎng)度,即列表中元素的數(shù)量。

語法:LLEN key 

127.0.0.1:6379> lrange key 0 -1
1) "a"
2) "111"
3) "b"
4) "222"
5) "c"
6) "d"
127.0.0.1:6379> llen key
(integer) 6
127.0.0.1:6379> llen key2
(integer) 0

返回值:

返回列表中元素的數(shù)量。如果該 key 對(duì)應(yīng)的不是一個(gè)列表,或者該列表為空,返回 0

如果 key 不存在,返回 0。

總結(jié):

LLEN 命令用于獲取 Redis 列表的長(zhǎng)度,返回列表中元素的數(shù)量。如果列表為空或不存在,返回 0

 阻塞版本命令

 blpop 和 brpop 是 lpop 和 rpop 的阻塞版本,和對(duì)應(yīng)非阻塞版本的作用基本?致,除了: 
• 在列表中有元素的情況下,阻塞和?阻塞表現(xiàn)是?致的。但如果列表中沒有元素,非阻塞版本會(huì)理解返回 nil,但阻塞版本會(huì)根據(jù) timeout,阻塞?段時(shí)間,期間 Redis 可以執(zhí)行其他命令,但要求執(zhí)行該命令的客戶端會(huì)表現(xiàn)為阻塞狀態(tài)(如圖 2-22 )。 
• 命令中如果設(shè)置了多個(gè)鍵,那么會(huì)從左向右進(jìn)?遍歷鍵,?旦有一個(gè)鍵對(duì)應(yīng)的列表中可以彈出元素,命令立即返回。
• 如果多個(gè)客戶端同時(shí)多?個(gè)鍵執(zhí)行 pop,則最先執(zhí)行命令的客戶端會(huì)得到彈出的元素。 

圖 2-22 阻塞版本的 blpop 和 非阻塞版本 lpop 的區(qū)別

演示一下BLPOP

BLPOP 命令是 阻塞式彈出(Blocking Pop)命令,它用于從一個(gè)或多個(gè)列表中彈出一個(gè)元素。如果列表為空,命令會(huì)阻塞,直到有元素可彈出為止,或者超時(shí)。

語法:BLPOP key [key ...] timeout

此時(shí)再開一個(gè)服務(wù)器去增加key里面的元素

此時(shí)發(fā)現(xiàn)它在100內(nèi)只有接收到key中是否有信息即可

返回值:

        如果成功彈出了元素,返回一個(gè)列表,包含兩個(gè)元素:

        第一個(gè)元素是列表名稱 key。

        第二個(gè)元素是從該列表中彈出的值。

        如果在 timeout 時(shí)間內(nèi)沒有元素可彈出,命令返回 nil。

總結(jié):

BLPOP 是 Redis 中的阻塞式彈出命令,可以從一個(gè)或多個(gè)列表中彈出元素。它會(huì)阻塞直到列表中有元素可供彈出,或者超時(shí)。如果超時(shí),命令返回 nil。此命令常用于任務(wù)隊(duì)列或消息隊(duì)列的實(shí)現(xiàn)。

 BRPOP同理BLPOP

List使用場(chǎng)景

消息隊(duì)列

Redis 可以使用 lpush + brpop 命令組合實(shí)現(xiàn)經(jīng)典的阻塞式生產(chǎn)者-消費(fèi)者模型隊(duì)列,
生產(chǎn)者客戶端使用 lpush 從列表左側(cè)插入元素,多個(gè)消費(fèi)者客戶端使用 brpop 命令阻塞式地從隊(duì)列中 "爭(zhēng)搶" 隊(duì)首元素。通過多個(gè)客戶端來保證消費(fèi)的負(fù)載均衡和高可用性。 

總結(jié) 

到此這篇關(guān)于Redis常見數(shù)據(jù)類型List列表使用詳解的文章就介紹到這了,更多相關(guān)Redis List列表詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis遍歷所有key的兩個(gè)命令(KEYS 和 SCAN)

    Redis遍歷所有key的兩個(gè)命令(KEYS 和 SCAN)

    這篇文章主要介紹了Redis遍歷所有key的兩個(gè)命令(KEYS 和 SCAN),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • springboot使用Redis作緩存使用入門教程

    springboot使用Redis作緩存使用入門教程

    這篇文章主要介紹了springboot使用Redis作緩存使用入門教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • SpringBoot集成Redis的思路詳解

    SpringBoot集成Redis的思路詳解

    Redis是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。接下來通過本文給大家分享SpringBoot集成Redis的詳細(xì)過程,感興趣的朋友一起看看吧
    2021-10-10
  • Redis持久化方式之RDB和AOF的原理及優(yōu)缺點(diǎn)

    Redis持久化方式之RDB和AOF的原理及優(yōu)缺點(diǎn)

    在Redis中,數(shù)據(jù)可以分為兩類,即內(nèi)存數(shù)據(jù)和磁盤數(shù)據(jù),Redis?提供了兩種不同的持久化方式,其中?RDB?是快照備份機(jī)制,AOF?則是追加寫操作機(jī)制,本文將詳細(xì)給大家介紹Redis?持久化方式RDB和AOF的原理及優(yōu)缺點(diǎn),感興趣的同學(xué)可以跟著小編一起來學(xué)習(xí)
    2023-06-06
  • Centos 7 如何安裝Redis(推薦)

    Centos 7 如何安裝Redis(推薦)

    這篇文章主要介紹了Centos 7 如何安裝Redis,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 基于session?Redis實(shí)現(xiàn)登錄

    基于session?Redis實(shí)現(xiàn)登錄

    這篇文章主要介紹了基于session?Redis實(shí)現(xiàn)登錄的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • 查看redis的緩存時(shí)間方式

    查看redis的緩存時(shí)間方式

    這篇文章主要介紹了查看redis的緩存時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Redis的大Key對(duì)持久化影響分析

    Redis的大Key對(duì)持久化影響分析

    為了保證數(shù)據(jù)的持久性,Redis提供了兩種持久化的方式,本文主要介紹了Redis的大Key對(duì)持久化影響分析,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Redis中SDS簡(jiǎn)單動(dòng)態(tài)字符串詳解

    Redis中SDS簡(jiǎn)單動(dòng)態(tài)字符串詳解

    Redis中的SDS(Simple?Dynamic?String)是一種自動(dòng)擴(kuò)容的字符串實(shí)現(xiàn)方式,它可以提供高效的字符串操作,并且支持二進(jìn)制安全。SDS的設(shè)計(jì)使得它可以在O(1)時(shí)間內(nèi)實(shí)現(xiàn)字符串長(zhǎng)度的獲取和修改,同時(shí)也可以在O(N)的時(shí)間內(nèi)進(jìn)行字符串的拼接和截取。
    2023-04-04
  • 解決Redis開啟遠(yuǎn)程訪問及密碼問題

    解決Redis開啟遠(yuǎn)程訪問及密碼問題

    這篇文章主要介紹了Redis開啟遠(yuǎn)程訪問及密碼的教程,文中給大家提到了Redis啟動(dòng)報(bào)錯(cuò)解決方法,需要的朋友可以參考下
    2019-10-10

最新評(píng)論