Redis--列表

列表(list)類型是用來存儲多個有序的字符串,一個列表最多可以儲存2^32 - 1個元素,列表是比較靈活的數據結構,它可以充當棧和隊列的角色。

列表類型特點:

? ? 1.列表中的元素是有序的,這就意味著可以通過索引下標獲取某個元素或者某個范圍內的元素。

? ? 2.列表中的元素可以是重復的


命令:

插入:

-- 從右邊插入

rpush key value [value ...]

-- 從左側插入

lpush key value [value...]

-- 向某個元素前或后插入元素

linsert key before|after element value

linsert 命令會從列表中找到等于element的元素,在其前或者后插入一個新的元素value


查找:

-- 獲取指定范圍內的元素列表

lrange key start end?

lrange 操作會獲取列表指定索引范圍的所有元素。索引下標從左到右分別是0 ~ N-1, 并且 lrange的end包含本身?

-- 獲取列表指定索引下標的元素

lindex key index

獲取最后一個元素可以為lindex key -1

-- 獲取列表長度

llen key


刪除:

--從列表左側彈出元素

lpop key?

--從列表有測彈出元素

rpop key

--刪除指定元素

lrem key count value

lrem命令會從列表中找到等于value的元素進行刪除,根據count的不同分為三種情況,

count? > 0 從左到右,刪除最多count個元素

count < 0 從右到左,刪除最多count絕對值個元素

count = 0 刪除所有

-- 按照索引范圍修剪列表

ltrim key start end?

ltrim操作會使列表保留start--end之間的元素,包含start? end對應的元素


修改:

-- 修改指定索引下標的元素

lset key index newValue


阻塞:

-- 阻塞式彈出

blpop key [key...] timeout

brpop key [key...] timeout

blpop和brpop是lpop和rpop的阻塞版本,

參數說明:

--key [key...] 多個列表的鍵

--timeout:阻塞時間(單位:秒)

? ? 列表為空:如果timeout=3,那么客戶端要等到3秒后返回,如果timeout=0,那么客戶端一直阻塞等下去,但是如果在阻塞期間,其他客戶端添加了數據,使列表不為空,則會立即返回

? ? 列表不為空,客戶端會立即返回

--在使用brpop時有兩點需要注意

? ? 第一點:如果多個鍵,那么brpop會從左至右遍歷鍵,一旦有一個鍵能彈出元素,客戶端變會立即返回,如果此時另一個客戶端向空列表中插入數據,客戶端會立即返回相應的列表彈出的元素。

? ? 第二點:如果多個客戶端對同一個鍵執(zhí)行brpop,那么最先執(zhí)行brpop命令的客戶端可以獲取到彈出的值


-- 內部編碼:

ziplist(壓縮列表):當列表的元素個數小于list-max-ziplist-entries配置(默認512個),同時列表中每個元素 的值都小于list-max-ziplist-value配置(默認64字節(jié)),Redis會選用ziplist來作為列表的內部實現,來減少內存的使用。

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

quicklist:Redis 3.2提供,是以一個ziplist為節(jié)點的linkedlist,參考微博:https://matt.sh/redis-quicklist


-- 使用實例

? ? 消息隊列:

????????????lpush+brpop組合可實現阻塞消息隊列,生產者客戶端使用lpush從列表左側插入元素,多個消費者客戶端從列表右側使用brpop命令阻塞式的搶列表尾部的元素,多個客戶端保證了消費者的負載均衡和高可用性。

? ? --------------------------------------------------------------------------------------------------------------------------------

lpush + lpop = stack(棧)

lpush + rpop = Queue(隊列)

lpush + ltrim = Capped Collection(有限集合)

lpush + brpop = Message Queue(消息隊列)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 列表類型簡介 列表(list)用于存儲多個有序的字符串。列表是一種比較靈活的數據結構,可以充當棧和隊列的角色,在實...
    閑睡貓閱讀 6,049評論 0 3
  • 1. 概述: 在Redis中,List類型是按照插入順序排序的~字符串鏈表。和數據結構中的普通鏈表一樣,我們可以在...
    六月星空2011閱讀 367評論 0 0
  • Redis 列表(List) 命令 下表列出了列表相關的基本命令: 1> blpop 命令:移出并獲取列表的第一個...
    stakeing閱讀 1,379評論 0 0
  • 1.Redis特性 1)速度快:數據存放在內存上、基于C語言實現、單線程架構預防多線程競爭問題;2)基于鍵值對的數...
    Sponge1128閱讀 749評論 0 1
  • 一代梁王,初分晉地,雙魚正照夷門。臥牛城闊,相接四邊村。多少金明陳跡,上林苑花發(fā)三春。綠楊外,溶溶汴水,千里接龍津...
    chi樂22閱讀 807評論 0 0

友情鏈接更多精彩內容