Redis list

介紹

REDIS_LIST (列 表) 是 LPUSH 、 LRANGE 等 命 令 的 操 作 對 象, 它 使 用REDIS_ENCODING_ZIPLIST 和 REDIS_ENCODING_LINKEDLIST 這兩種方式編碼:

創建新列表時 Redis 默認使用 REDIS_ENCODING_ZIPLIST 編碼,當以下任意一個條件被滿足時,列表會被轉換成 REDIS_ENCODING_LINKEDLIST 編碼:? 試 圖 往 列 表 新 添 加 一 個 字 符 串 值, 且 這 個 字 符 串 的 長 度 超 過server.list_max_ziplist_value (默認值為 64 )。ziplist 包含的節點超過 server.list_max_ziplist_entries (默認值為 512)。

list 是一個鏈表結構,可以理解為一個每個子元素都是 string 類型的雙向鏈表。主要功能是 push、pop、獲取一個范圍的所有值等。操作中 key 理解為鏈表的名字。是一個雙端鏈表的結構。

指令

LPUSH key value [value ...]

將一個或多個值?value?插入到列表?key?的表頭

如果有多個?value?值,那么各個?value?值按從左到右的順序依次插入到表頭: 比如說,對空列表?mylist?執行命令?LPUSH?mylist?a?b?c?,列表的值將是?c?b?a?,這等同于原子性地執行?LPUSH?mylist?a?、?LPUSH?mylist?b?和?LPUSH?mylist?c?三個命令。

如果?key?不存在,一個空列表會被創建并執行?LPUSH?操作。

RPUSH key value [value ...]

將一個或多個值?value?插入到列表?key?的表尾(最右邊)。

如果有多個?value?值,那么各個?value?值按從左到右的順序依次插入到表尾:比如對一個空列表?mylist?執行?RPUSH?mylist?a?b?c?,得出的結果列表為?a?b?c?,等同于執行命令?RPUSH?mylist?a?、?RPUSH?mylist?b?、?RPUSH?mylist?c?。

如果?key?不存在,一個空列表會被創建并執行?RPUSH?操作。

LINSERT key BEFORE|AFTER pivot value

將值?value?插入到列表?key?當中,位于值?pivot?之前或之后。

當?pivot?不存在于列表?key?時,不執行任何操作。

當?key?不存在時,?key?被視為空列表,不執行任何操作。

如果?key?不是列表類型,返回一個錯誤。

LSET key index value

將列表?key?下標為?index?的元素的值設置為?value?。

當?index?參數超出范圍,或對一個空列表(?key?不存在)進行?LSET?時,返回一個錯誤。


LREM key count value

根據參數?count?的值,移除列表中與參數?value?相等的元素。

count?的值可以是以下幾種:

count?>?0?: 從表頭開始向表尾搜索,移除與?value?相等的元素,數量為?count?。

count?<?0?: 從表尾開始向表頭搜索,移除與?value?相等的元素,數量為?count?的絕對值。

count?=?0?: 移除表中所有與?value?相等的值。


LRANGE key start stop

返回列表?key?中指定區間內的元素,區間以偏移量?start?和?stop?指定。

下標(index)參數?start?和?stop?都以?0?為底,也就是說,以?0?表示列表的第一個元素,以?1?表示列表的第二個元素,以此類推。

你也可以使用負數下標,以?-1?表示列表的最后一個元素,?-2?表示列表的倒數第二個元素,以此類推。

LTRIM key start stop

對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。

舉個例子,執行命令?LTRIM?list?0?2?,表示只保留列表?list?的前三個元素,其余元素全部刪除。

下標(index)參數?start?和?stop?都以?0?為底,也就是說,以?0?表示列表的第一個元素,以?1?表示列表的第二個元素,以此類推。

你也可以使用負數下標,以?-1?表示列表的最后一個元素,?-2?表示列表的倒數第二個元素,以此類推。

當?key?不是列表類型時,返回一個錯誤。


LPOP key

移除并返回列表?key?的頭元素。


RPOP key

移除并返回列表?key?的尾元素。


LLEN key

返回列表?key?的長度。

如果?key?不存在,則?key?被解釋為一個空列表,返回?0?.

如果?key?不是列表類型,返回一個錯誤。


RPOPLPUSH source destination

命令?RPOPLPUSH?在一個原子時間內,執行以下兩個動作:

將列表?source?中的最后一個元素(尾元素)彈出,并返回給客戶端。

將?source?彈出的元素插入到列表?destination?,作為?destination?列表的的頭元素。

舉個例子,你有兩個列表?source?和?destination?,?source?列表有元素?a,?b,?c?,?destination?列表有元素?x,?y,?z?,執行?RPOPLPUSH?sourcedestination?之后,?source?列表包含元素?a,?b?,?destination?列表包含元素?c,?x,?y,?z?,并且元素?c?會被返回給客戶端。

如果?source?不存在,值?nil?被返回,并且不執行其他動作。

如果?source?和?destination?相同,則列表中的表尾元素被移動到表頭,并返回該元素,可以把這種特殊情況視作列表的旋轉(rotation)操作。

LINDEX key index

返回列表?key?中,下標為?index?的元素。

下標(index)參數?start?和?stop?都以?0?為底,也就是說,以?0?表示列表的第一個元素,以?1?表示列表的第二個元素,以此類推。

你也可以使用負數下標,以?-1?表示列表的最后一個元素,?-2?表示列表的倒數第二個元素,以此類推。

如果?key?不是列表類型,返回一個錯誤。

阻塞處理

BLPOP 、BRPOP 和 BRPOPLPUSH 三個命令都可能造成客戶端被阻塞,以下將這些命令統稱為列表的阻塞原語。

阻塞原語并不是一定會造成客戶端阻塞:只有當這些命令被用于空列表時,它們才會阻塞客戶端。如果被處理的列表不為空的話,它們就執行無阻塞版本的 LPOP 、RPOP 或 RPOPLPUSH 命令。

?


BLPOP key [key ...] timeout

BLPOP?是列表的阻塞式(blocking)彈出原語。

它是?LPOP?命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連接將被?BLPOP?命令阻塞,直到等待超時或發現可彈出元素為止。

當給定多個?key?參數時,按參數?key?的先后順序依次檢查各個列表,彈出第一個非空列表的頭元素。

BRPOP key [key ...] timeout

BRPOP?是列表的阻塞式(blocking)彈出原語。

它是?RPOP?命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連接將被?BRPOP?命令阻塞,直到等待超時或發現可彈出元素為止。

當給定多個?key?參數時,按參數?key?的先后順序依次檢查各個列表,彈出第一個非空列表的尾部元素。

關于阻塞操作的更多信息,請查看?BLPOP?命令,?BRPOP?除了彈出元素的位置和?BLPOP?不同之外,其他表現一致。


BRPOPLPUSH source destination timeout

BRPOPLPUSH?是?RPOPLPUSH?的阻塞版本,當給定列表?source?不為空時,?BRPOPLPUSH?的表現和?RPOPLPUSH?一樣。

當列表?source?為空時,?BRPOPLPUSH?命令將阻塞連接,直到等待超時,或有另一個客戶端對?source?執行?LPUSH?或?RPUSH?命令為止。

超時參數?timeout?接受一個以秒為單位的數字作為值。超時參數設為?0?表示阻塞時間可以無限期延長(block indefinitely) 。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Redis列表是簡單的字符串列表,排序插入順序。您可以在頭部或列表的尾部Redis的列表添加元素。 列表的最大長度...
    大明白閱讀 4,114評論 0 50
  • Redis從入門到精通:中級篇 本文目錄 上一篇文章以認識Redis為主,寫了Redis系列的第一篇,現在開啟第二...
    叨唧唧的閱讀 706評論 0 0
  • Redis 的 list 類型其實就是一個每個子元素都是 string 類型的雙向鏈表。主要功能是 push、po...
    鬭闢閱讀 322評論 0 0
  • Redis 簡介 redis是一種高級的key:value存儲系統,其中value支持五種數據類型: 字符串(St...
    本杰明面癱閱讀 378評論 0 1
  • 經過多年的浮光掠影, 我需要好好坐下來喝一杯茶, 繁華與寂寞的過去, 與沉淪的心緒, 都隨著裊裊的熱氣散去, 隨意...
    果果77閱讀 271評論 2 3