1、列表類型內部是使用雙向鏈表(double linked list)實現的,所以想兩端添加元素特快,時間複雜度是O(1),獲取越接近兩端的元素速度越快。不過代價是通過索引訪問元素的速度會比較慢。
127.0.0.1:6379> LRANGE list 0 8
1) "4"
2) "3"
3) "2"
4) "1"
2、每個鍵最多能容納的字段數量與列表相同都是 2^32 - 1 個元素。內部用來存儲字段數量的變量類型應該是Integer,因爲一個整形是4個字節,每個字節8位,剛好32位,最大數字就是 2^32-1 個(包括0)。
2.1、索引是從0開始
3、LPUSH key value 在隊列的左邊添加元素,返回隊列元素的長度。
127.0.0.1:6379> lpush list 123
(integer) 3
127.0.0.1:6379> lpush list 123
(integer) 4
(integer) 3
127.0.0.1:6379> lpush list 123
(integer) 4
一次性添加多個元素
127.0.0.1:6379> LPUSH list 11 12 13
4、LRANGE key start end 返回隊列中[start ,end] 之間的元素,和素組一樣從0開始,包含end位。
如果start > end 則返回空列表
127.0.0.1:6379> LRANGE list 3 2
(empty list or set)
(empty list or set)
如果end > LLEN key 則返回所有列表
127.0.0.1:6379> LLEN list
(integer) 4127.0.0.1:6379> LRANGE list 0 8
1) "4"
2) "3"
3) "2"
4) "1"
如果end=-1 LRANGE key 0 -1 返回所有列表
127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
1) "4"
2) "3"
3) "2"
4) "1"
倒序取數據,start end 都小於0
127.0.0.1:6379> LRANGE list 0 -1
1) "7"2) "6"3) "5"4) "4"5) "3"6) "2"7) "1"
127.0.0.1:6379> LRANGE list -1 -1
1) "1"
127.0.0.1:6379> LRANGE list -2 -1
1) "2"
2) "1"
1) "1"
127.0.0.1:6379> LRANGE list -2 -1
1) "2"
2) "1"
5、LLEN key 獲取列表的長度
127.0.0.1:6379> LLEN list
(integer) 46、RPUSH key value 在隊列的右邊添加元素,返回元素長度
127.0.0.1:6379> RPUSH list -1
(integer) 5
(integer) 5
127.0.0.1:6379> LRANGE list 0 -1
1) "4"2) "3"3) "2"4) "1"
5) "-1"
7、LPOP/RPOP 彈出左/右邊的元素
127.0.0.1:6379> LPOP list"4"127.0.0.1:6379> LRANGE list 0 -11) "3"
2) "2"3) "1"4) "-1"
127.0.0.1:6379> RPOP list"-1"127.0.0.1:6379> LRANGE list 0 -1
1) "3"2) "2"
3) "1"
8、LREM key count value 刪除 count 個值爲value的元素
當count > 0 從左邊刪除count個值value的元素
當count<0 從右邊刪除 |count| 個值value的元素
當count = 0 刪除所有值爲 value 的元素
127.0.0.1:6379> LRANGE list 0 -1
1) "1"2) "1"3) "1"4) "1"5) "1"6) "3"7) "2"
127.0.0.1:6379> LREM list 0 1(integer) 5127.0.0.1:6379> LRANGE list 0 -1
1) "3"
2) "2"
9、LSET key index value 在索引index處添加值value
127.0.0.1:6379> LRANGE list 0 -1
1) "13"2) "12"3) "11"4) "7"5) "6"6) "5"7) "4"8) "3"9) "2"
10) "1"
127.0.0.1:6379> LSET list 3 8 9 10 不能同時設置多個值
(error) ERR wrong number of arguments for 'lset' command127.0.0.1:6379> LSET list 3 8OK127.0.0.1:6379> LRANGE list 0 -1
1) "13"2) "12"3) "11"4) "8"5) "6"6) "5"7) "4"8) "3"9) "2"
10) "1"
10、LINDEX list 0根據索引獲取值
127.0.0.1:6379> LINDEX list 0
"13"
12、LTRIM key start end 移掉除(start,end)之外的數據。保留[start,end]數據,包括start,end
127.0.0.1:6379> LRANGE list 0 -1
1) "5"2) "4"3) "3"4) "2"5) "1"
127.0.0.1:6379> LTRIM list 1 3
OK
127.0.0.1:6379> LRANGE list 0 -1
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "4"2) "3"
3) "2"
13、LINSET key BEFORE | AFTER pivot value 插入數據
127.0.0.1:6379> LRANGE list 0 -1
1) "4"2) "3"3) "2"
127.0.0.1:6379> LINSERT list before 4 5(integer) 4127.0.0.1:6379> LRANGE list 0 -1
1) "5"2) "4"3) "3"
4) "2"
127.0.0.1:6379> LINSERT list after 2 0(integer) 5127.0.0.1:6379> LRANGE list 0 -1
1) "5"2) "4"3) "3"4) "2"
5) "0"
如果有多個相同的pivot,則從左邊數第一個開始
127.0.0.1:6379> LRANGE list 0 -1
1) "4"2) "5"3) "4"4) "3"5) "2"6) "0"
127.0.0.1:6379> LINSERT list after 4 3(integer) 7127.0.0.1:6379> LRANGE list 0 -11) "4"
2) "3"3) "5"4) "4"5) "3"6) "2"
7) "0"
BEFORE 也是從左邊第一個開始
127.0.0.1:6379> LINSERT list Before 3 9(integer) 8127.0.0.1:6379> LRANGE list 0 -1
1) "4"2) "9"3) "3"4) "5"5) "4"6) "3"7) "2"
8) "0"
14、RPOPLPUSH source destination --列表類型,將元素從一個列表轉移到另一個列表
從source右邊彈出一個元素,再LPUSH到destination進去
RPOPLPUSH source destination
內部實現:
def rpoplpush( source , destination)
value = RPOP source
LPUSH destination value
return value
15、彙總
A、列表可以作爲棧使用,LPUSH/LPOP 或者 RPUSH/RPOP
B、作爲list使用,LPUSH/RPOP 或者 RPUSH/LPOP