Redis學習筆記 - 數據類型與API(3)List

List (列表)

特色

  • 有序
  • 能夠重複
  • 左右兩邊插入彈出

圖片描述
圖片描述

經常使用命令

命令 含義 時間複雜度
lrange 獲取列表指定索引範圍的全部item O(S+N),S 爲偏移量 start,N 爲指定區間內元素的數量。
lpush、rpush 從列表左/右側插入1-N個值 O(1)
lpop、rpop 從列表左/右側彈出1個值 O(1)
linsert 在list指定的值前/後插入newValue O(N), N 爲尋找 pivot 過程當中通過的元素數量。
lrem 從列表中刪除value相等的項 O(N), N 爲列表的長度。
ltrim 按照索引範圍修剪列表 O(N),N 爲被移除的元素的數量。
lindex 獲取列表指定索引的item O(N), N 爲到達下標 index 過程當中通過的元素數量。所以,對列表的頭元素和尾元素執行 LINDEX 命令,複雜度爲O(1)。
llen 獲取列表長度 O(1)
lset 設置列表指定索引值爲newValue 對頭元素或尾元素進行 LSET 操做,複雜度爲 O(1)。其餘狀況下,爲 O(N), N 爲列表的長度。

lrange

  • lrange key start end (獲取列表指定索引範圍的全部item(包含start和end))

a - b - c - d - e - f

索引從左到右 0 ~ 5
索引從右到左 -1 ~ -6html

127.0.0.1:6379> rpush listkey a b c d e f
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lrange listkey 0 2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange listkey 1 -2
1) "b"
2) "c"
3) "d"
4) "e"

lpush、rpush

  • lpush key value1 value2 value3 ... (從列表左側插入1-N個值)
  • rpush key value1 value2 value3 ... (從列表右側插入1-N個值)
127.0.0.1:6379> lpush listkey c b a
(integer) 3
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpush listkey c b a
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "c"
5) "b"
6) "a"

lpop、rpop

  • lpop key (從列表左側彈出一個item)
  • rpop key (從列表右側彈出一個item)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lpop listkey
"a"
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> rpop listkey
"a"
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"

linsert

  • linsert key before|after value newValue (在list指定的值前|後插入newValue)
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"
127.0.0.1:6379> linsert listkey before b 0
(integer) 5
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "c"
5) "b"
127.0.0.1:6379> linsert listkey after c 1
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "1"
5) "c"
6) "b"

lrem

  • lrem key count value (根據count的值,從列表中刪除value相等的項)
(1) count>0,從左到右,刪除最多count個value相等的項
(2) count<0,從右到左,刪除最多abs(count)個value相等的項
(3) count=0,從左到右,刪除全部value相等的項
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "1"
5) "c"
6) "b"
127.0.0.1:6379> lrem listkey 1 b
(integer) 1
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "c"
3) "1"
4) "c"
5) "b"
127.0.0.1:6379> lrem listkey -1 c
(integer) 1
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "c"
3) "1"
4) "b"

ltrim

  • ltrim key start end (按照索引範圍修剪列表)
127.0.0.1:6379> lrange listkey 0 -1
1) "c"
2) "b"
3) "a"
4) "a"
5) "b"
6) "c"
127.0.0.1:6379> ltrim listkey 1 3
OK
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "a"
3) "a"

lindex

  • lindex key index (獲取列表指定索引的item)

llen

  • llen key (獲取列表長度)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lindex listkey 0
"a"
127.0.0.1:6379> lindex listkey -1
"f"
127.0.0.1:6379> llen listkey
(integer) 6

lset

  • lset key index newValue (設置列表指定索引值爲newValue)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lset listkey 2 0
OK
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "0"

更多 List 相關命令:http://www.redis.cn/commands....

Tips

lpush + lpop = Stack (棧)
lpush + rpop = Queue (隊列)
lpush + ltrim = Capped Collection (定容集合)
lpush + brpop = Message Queue (消息隊列)

相關內容:

Redis學習筆記 - 數據類型與API(1)Key
Redis學習筆記 - 數據類型與API(2)String
Redis學習筆記 - 數據類型與API(3)List
Redis學習筆記 - 數據類型與API(4)Set
Redis學習筆記 - 數據類型與API(5)Sorted Set
Redis學習筆記 - 數據類型與API(6)Hashredis

相關文章
相關標籤/搜索