溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用

發(fā)布時間:2022-01-15 10:51:40 來源:億速云 閱讀:176 作者:柒染 欄目:開發(fā)技術(shù)

今天給大家介紹一下redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用。文章的內(nèi)容小編覺得不錯,現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。

    list列表簡介

    • list是簡單的字符串列表(說通俗點,存儲的還是字符串),按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊),個列表最多可以包含^32-1個元素(每個列表超過40億個元素)。

    • Redis中的list和Java中的LinkedList很像,底層都是一種鏈表結(jié)構(gòu),list的插入和刪除操作非???,時間復(fù)雜度為 0(1),不像數(shù)組結(jié)構(gòu)插入、刪除操作需要移動數(shù)據(jù)。像歸像,但是redis中的list底層可不是一個雙向鏈表那么簡單。

    • 當數(shù)據(jù)量較少的時候它的底層存儲結(jié)構(gòu)為一塊連續(xù)內(nèi)存,稱之為ziplist(壓縮列表),它將所有的元素緊挨著一起存儲,分配的是一塊連續(xù)的內(nèi)存;當數(shù)據(jù)量較多的時候?qū)兂蓂uicklist(快速鏈表)結(jié)構(gòu)。

    • 可單純的鏈表也是有缺陷的,鏈表的前后指針prev和next會占用較多的內(nèi)存,會比較浪費空間,而且會加重內(nèi)存的碎片化。在redis 3.2之后就都改用ziplist+鏈表的混合結(jié)構(gòu),稱之為quicklist(快速鏈表)。

    常用命令

    添加命令

    lpush key value

    從左邊插入元素(將一個或多個值插入到列表頭部)

    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

    從右邊插入元素(將一個或多個值插入到列表的尾部(最右邊))

    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
    向某個元素前/后插入元素,返回結(jié)果為當前列表長度,注意列表不存在或者指定元素不存在列表中時,都將不執(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"

    查詢命令

    lrange key start end
    獲取列表中指定范圍內(nèi)的元素列表;若start值大于列表end值則返回空列表
    如上已經(jīng)展示過了

    lindex key index
    獲取列表指定索引下標的元素

    127.0.0.1:6379> lindex ids 0
    "2"
    127.0.0.1:6379> lindex ids -1
    "4"

    llen key
    獲取列表長度;列表不存在則返回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ù)count的不同分為三種情況:
    count > 0,從表頭開始向表尾,移除數(shù)量為count個元素;
    count < 0,從表尾開始向表頭,移除數(shù)量為count的絕對值個元素;
    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
    對一個列表進行修剪(trim),就是說,讓列表只保留指定區(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
    修改指定下標的元素的值設(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 &hellip;] timeout
    移出并獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時(單位秒)或發(fā)現(xiàn)可彈出元素為止

    brpop key [key &hellip;] timeout
    移出并獲取列表的最后一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止
    演示:
    開啟三個reids連接窗口,第一個執(zhí)行blpop ,第二個執(zhí)行brpop ,第三個執(zhí)行添加:
    可以看到窗口1和2執(zhí)行完都已經(jīng)阻塞在這里,這是因為ids中沒有元素

    redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用

    redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用

    窗口3執(zhí)行添加:lpush ids 1 2 3 4 5 6
    可以看到窗口1和2立即彈出對應(yīng)元素:

    redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用

    redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用

    應(yīng)用場景

    消息隊列:lpop和rpush(或者反過來,lpush和rpop)能實現(xiàn)隊列的功能

    朋友圈的點贊列表、評論列表、排行榜:lpush命令和lrange命令能實現(xiàn)最新列表的功能,每次通過lpush命令往列表里插入新的元素,然后通過lrange命令讀取最新的元素列表。

    以上就是redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用的全部內(nèi)容了,更多與redis的list數(shù)據(jù)類型相關(guān)命令分析及如何使用相關(guān)的內(nèi)容可以搜索億速云之前的文章或者瀏覽下面的文章進行學(xué)習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下億速云!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI