Redis 的 list 類型其實就是一個每個子元素都是 string 類型的雙向鏈表箕别。主要功能是 push、pop滞谢、獲取一個范圍的所有值等串稀。list 的 pop 操作還有阻塞版本的,是為了避免輪詢狮杨。
1 lpush
在 key 對應 list 的頭部添加字符串元素
127.0.0.1:6379> lpush list world
(integer) 1
127.0.0.1:6379> lpush list hello
(integer) 2
截取list
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "world"
2 rpush
在 key 對應 list 的尾部添加字符串元素
127.0.0.1:6379> rpush list hello
(integer) 1
127.0.0.1:6379> rpush list world
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "world"
3 linsert
在 key 對應 list 的特定位置之前或之后添加字符串元素
127.0.0.1:6379> rpush list hello
(integer) 1
127.0.0.1:6379> rpush list world
(integer) 2
127.0.0.1:6379> linsert list before world one
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
3) "world"
127.0.0.1:6379> linsert list after world two
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
3) "world"
4) "two"
4 lset
設置 list 中指定下標的元素值(下標從 0 開始)下標為負表示從右邊開始(下標從-1開始)
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
3) "world"
4) "two"
127.0.0.1:6379> lset list 1 three
OK
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "three"
3) "world"
4) "two"
5 lrem
從 key 對應 list 中刪除 count 個和 value 相同的元素母截。
count>0 時,按從頭到尾的順序刪除:
127.0.0.1:6379> rpush list hello
(integer) 1
127.0.0.1:6379> rpush list hello
(integer) 2
127.0.0.1:6379> rpush list world
(integer) 3
127.0.0.1:6379> rpush list hello
(integer) 4
127.0.0.1:6379> rpush list hello
(integer) 5
127.0.0.1:6379> lrem list 2 hello
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "hello"
3) "hello"
count<0 時橄教,按從尾到頭的順序刪除
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "hello"
3) "world"
4) "hello"
5) "hello"
127.0.0.1:6379> lrem list -2 hello
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "hello"
3) "world"
count=0 時清寇,刪除全部
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "hello"
3) "world"
4) "hello"
5) "hello"
127.0.0.1:6379> lrem list 0 hello
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "world"
6 ltrim
保留指定 key 的值范圍內的數據
127.0.0.1:6379> lrange list 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
127.0.0.1:6379> ltrim list 1 -1
OK
127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
7 lpop(彈出并刪除)
從 list 的頭部刪除元素,并返回刪除元素护蝶。
127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> lpop list
"1"
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "3"
3) "4"
8 rpop(彈出并刪除)
從 list 的尾部刪除元素华烟,并返回刪除元素
9 rpoplpush
從第一個 list 的尾部移除元素并添加到第二個 list 的頭部,最后返回被移除的元素值,整個操作是原子的.如果第一個 list 是空或者不存在返回 nil
127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> lrange list2 0 -1
1) "zero"
2) "onr"
3) "two"
4) "three"
127.0.0.1:6379> rpoplpush list1 list2
"3"
127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
127.0.0.1:6379> lrange list2 0 -1
1) "3"
2) "zero"
3) "onr"
4) "two"
5) "three"
10 lindex
返回名稱為 key 的 list 中 的index 位置元素
127.0.0.1:6379> lrange list2 0 -1
1) "3"
2) "zero"
3) "onr"
4) "two"
5) "three"
127.0.0.1:6379> lindex list2 3
"two"
11 llen
返回 key 對應 list 的長度
(integer) 5127.0.0.1:6379> lrange list2 0 -1
1) "3"
2) "zero"
3) "onr"
4) "two"
5) "three"
127.0.0.1:6379> llen list2
(integer) 5
12 blpop
它是lpop命令的阻塞版本持灰,當給定列表內沒有任何元素可供彈出的時候盔夜,連接將被blpop命令阻塞,直到等待超時或發(fā)現可彈出元素為止堤魁。當給定多個key參數時喂链,按參數key的先后順序依次檢查各個列表,彈出第一個非空列表的頭元素姨涡。必須設置timeout超時參數衩藤,當timeout為0時表示阻塞時間無限延長吧慢。
127.0.0.1:6379> del list1 command
(integer) 1
127.0.0.1:6379> lpush command name
(integer) 1
127.0.0.1:6379> lpush request wxc
(integer) 1
127.0.0.1:6379> blpop list1 command request 0
1) "command"
2) "name"
13 brpop
類似blpop
14 brpoplpush
類似rpoplpush
15 lpushx
將值value插入到列表key的表頭涛漂,當且僅當key存在并且是一個列表。和lpush命令相反,當key不存在時匈仗,lpushx命令什么也不做瓢剿。