天天看點

redis中的list連結清單

List

是一個(一個Key-多個Value),Key代表List名稱,value是裡面的鍵值

List的索引有兩種:一種是0~len - 1,另一種是 -len ~ -1

Left、right都可插入元素(Left代表從頭部插入,right代表從尾部插入)

如果,key不存在,建立連結清單

如果,key存在,連結清單添加内容

如果,連結清單值全部移除,key也就消失了

效率分析

連結清單的頭尾元素操作,效率都非常高

連結清單中間元素操作,效率比較低

頭尾添加值

LPUSH key value [value …]

将一個或多個值 value 插入到清單 key 的表頭

RPUSH key value [value …]

将一個或多個值 value 插入到清單 key 的表尾(最右邊)。

如果 key 不存在,一個空清單會被建立并執行 LPUSH(RPUSH) 操作。

當 key 存在但不是清單類型時,傳回一個錯誤。

傳回值

執行操作後,表的長度。

local_redis:0>lpush mylist 5 6 7
"3"
local_redis:0>rpush mylist 5 6
"5"
local_redis:0>lpush mylist 1
"6"
local_redis:0>lrange mylist 0 -1
 1)  "1"
 2)  "7"
 3)  "6"
 4)  "5"
 5)  "5"
 6)  "6"
           

頭尾添加值(2)

LPUSHX key value

将值 value 插入到清單 key 的表頭,當且僅當 key 存在并且是一個清單。

和 LPUSH 指令相反,當 key 不存在時, LPUSHX 指令什麼也不做。

RPUSHX key value

将值 value 插入到清單 key 的表尾,當且僅當 key 存在并且是一個清單。

和 RPUSH 指令相反,當 key 不存在時, RPUSHX 指令什麼也不做。

傳回值:

指令執行之後,表的長度。

local_redis:0>lpushx a 5 6
"ERR wrong number of arguments for 'lpushx' command"
local_redis:0>lpush a 5 6
"2"
local_redis:0>rpushx a 0
"3"
local_redis:0>lrange a 0 -1
 1)  "6"
 2)  "5"
 3)  "0"
           

檢視索引範圍内的值

LRANGE key start stop

超出範圍的下标

超出範圍的下标值不會引起錯誤。

如果 start 下标比清單的最大下标 end ( LLEN list 減去 1 )還要大,那麼 LRANGE 傳回一個空清單。

如果 stop 下标比 end 下标還要大,Redis将 stop 的值設定為 end 。

傳回值:

一個清單,包含指定區間内的元素。

local_redis:0>lrange mylist 0 -1
 1)  "1"
 2)  "7"
 3)  "6"
 4)  "5"
 5)  "5"
 6)  "6"
local_redis:0>lrange mylist 0 1
 1)  "1"
 2)  "7"
local_redis:0>lrange mylist -6 -1
 1)  "1"
 2)  "7"
 3)  "6"
 4)  "5"
 5)  "5"
 6)  "6"
           

檢視指定索引的值

LINDEX key index

傳回清單 key 中,下标為 index 的元素。

如果 key 不是清單類型,傳回一個錯誤。

傳回值:

清單中下标為 index 的元素。

如果 index 參數的值不在清單的區間範圍内(out of range),傳回 nil 。

local_redis:0>lrange mylist 0 -1
 1)  "1"
 2)  "7"
 3)  "6"
 4)  "5"
 5)  "5"
 6)  "6"
local_redis:0>lindex mylist -1
"6"
local_redis:0>lindex mylist 1
"7"
local_redis:0>lindex mylist 0
"1"
           

輸出頭尾的值并進行删除

LPOP key

移除并傳回清單 key 的頭元素。

RPOP key

移除并傳回清單 key 的尾元素。

傳回值:

清單的頭或者尾元素。

當 key 不存在時,傳回 nil 。

local_redis:0>lrange mylist 0 -1
 1)  "1"
 2)  "7"
 3)  "6"
 4)  "5"
 5)  "5"
 6)  "6"
local_redis:0>lpop mylist
"1"
local_redis:0>rpop mylist
"6"
local_redis:0>lrange mylist 0 -1
 1)  "7"
 2)  "6"
 3)  "5"
 4)  "5"
           

擷取長度

LLEN key

傳回清單 key 的長度。

如果 key 不存在,則 key 被解釋為一個空清單,傳回 0 .

如果 key 不是清單類型,傳回一個錯誤。

傳回值:

清單 key 的長度。

local_redis:0>llen mylist
"4"
local_redis:0>lrange mylist 0 -1
 1)  "7"
 2)  "6"
 3)  "5"
 4)  "5"
           

删除值

LREM key count value

根據參數 count 的值,移除清單中與參數 value 相等的元素。

count 的值可以是以下幾種:

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

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

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

傳回值:

被移除元素的數量。

因為不存在的 key 被視作空表(empty list),是以當 key 不存在時, LREM 指令總是傳回 0 。

local_redis:0>lrange mylist 0 -1
 1)  "5"
 2)  "5"
 3)  "5"
 4)  "5"
 5)  "7"
 6)  "6"
 7)  "5"
 8)  "5"
local_redis:0>lrem mylist -2 5
"2"
local_redis:0>lrange mylist 0 -1
 1)  "5"
 2)  "5"
 3)  "5"
 4)  "5"
 5)  "7"
 6)  "6"
local_redis:0>lrem mylist 1 5
"1"
local_redis:0>lrange mylist 0 -1
 1)  "5"
 2)  "5"
 3)  "5"
 4)  "7"
 5)  "6"
local_redis:0>rpush mylist 5 5
"7"
local_redis:0>lrange mylist 0 -1
 1)  "5"
 2)  "5"
 3)  "5"
 4)  "7"
 5)  "6"
 6)  "5"
 7)  "5"
local_redis:0>lrem mylist 0 5
"5"
local_redis:0>lrange mylist 0 -1
 1)  "7"
 2)  "6"
           

保留指定區間的值

LTRIM key start stop

對一個清單進行修剪(trim),就是說,讓清單隻保留指定區間内的元素,不在指定區間之内的元素都将被删除。

舉個例子,執行指令 LTRIM list 0 2 ,表示隻保留清單 list 的前三個元素,其餘元素全部删除。

當 key 不是清單類型時,傳回一個錯誤。

超出範圍的下标

超出範圍的下标值不會引起錯誤。

如果 start 下标比清單的最大下标 end ( LLEN list 減去 1 )還要大,或者 start > stop , LTRIM 傳回一個空清單(因為 LTRIM 已經将整個清單清空)。

如果 stop 下标比 end 下标還要大,Redis将 stop 的值設定為 end 。

傳回值:

指令執行成功時,傳回 ok 。

local_redis:0>lrange mylist 0 -1
 1)  "7"
 2)  "6"
 3)  "1"
 4)  "2"
 5)  "3"
 6)  "4"
 7)  "5"
local_redis:0>ltrim mylist 5 6
"OK"
local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
           

設定指定索引的值

LSET key index value

将清單 key 下标為 index 的元素的值設定為 value 。

當 index 參數超出範圍,或對一個空清單( key 不存在)進行 LSET 時,傳回一個錯誤。

傳回值:

操作成功傳回 ok ,否則傳回錯誤資訊。

local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
 3)  "1"
 4)  "2"
 5)  "3"
local_redis:0>lset mylist 3 99
"OK"
local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
 3)  "1"
 4)  "99"
 5)  "3"
 local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
 3)  "1"
 4)  "99"
 5)  "3"
local_redis:0>lset mylist -2 -55
"OK"
local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
 3)  "1"
 4)  "-55"
 5)  "3"
 local_redis:0>lset aa 0 1
"ERR no such key"
local_redis:0>lset mylist 100 1
"ERR index out of range"
           

插入元素

LINSERT key BEFORE|AFTER pivot value

将值 value 插入到清單 key 當中,位于值 pivot 之前或之後。

當 pivot 不存在于清單 key 時,不執行任何操作。

當 key 不存在時, key 被視為空清單,不執行任何操作。

如果 key 不是清單類型,傳回一個錯誤。

傳回值:

如果指令執行成功,傳回插入操作完成之後,清單的長度。

如果沒有找到 pivot ,傳回 -1 。

如果 key 不存在或為空清單,傳回 0 。

local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
 3)  "1"
 4)  "-55"
 5)  "3"
 6)  "4"
 7)  "3"
local_redis:0>linsert mylist before 3 100
"8"
local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
 3)  "1"
 4)  "-55"
 5)  "100"
 6)  "3"
 7)  "4"
 8)  "3"
local_redis:0>linsert mylist after 3 99
"9"
local_redis:0>lrange mylist 0 -1
 1)  "4"
 2)  "5"
 3)  "1"
 4)  "-55"
 5)  "100"
 6)  "3"
 7)  "99"
 8)  "4"
 9)  "3"
 local_redis:0>linsert mylist before 11 12
"-1"
           

其他指令

BLPOP

BRPOP

BRPOPLPUSH

RPOPLPUSH

繼續閱讀