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