Redis列表是簡單的字符串列表,排序插入順序。您可以在頭部或列表的尾部Redis的列表添加元素弛矛。
列表的最大長度為232 - 1 (每個列表超過4十億元素4294967295)元素。
例子
redis 127.0.0.1:6379> LPUSH tutorials redis
(integer) 1
redis 127.0.0.1:6379> LPUSH tutorials mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH tutorials mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE tutorials 0 10
1) "mysql"
2) "mongodb"
3) "redis"
列表底層實現(xiàn)是雙向鏈表實現(xiàn)的,所有獲取頭部和尾部的數(shù)據(jù)時速度最快政勃,越往中間走越慢。如果通過index則效率會降低
LPUSH key value [value]
向鏈表左端添加元素兼砖,values是按左到右依次插入的奸远,返回值為列表中元素個數(shù),列表元素可以重復(fù)
127.0.0.1:6379> LPUSH list a b c
(integer) 3
127.0.0.1:6379> LPUSH list a b c
(integer) 6
127.0.0.1:6379> LRANGE list 0 6
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"
RPUSH key value [value]
向鏈表右端添加元素讽挟,其他與LPUSH相同
127.0.0.1:6379> RPUSH list d e f
(integer) 9
127.0.0.1:6379> LRANGE list 0 9
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"
7) "d"
8) "e"
9) "f"
LPUSHX key value
向列表左端添加元素懒叛,只有key存在時才可以添加
127.0.0.1:6379> EXiSTS list1
(integer) 0
127.0.0.1:6379> LPUSHX list1 a
(integer) 0
127.0.0.1:6379> LPUSHX list g
(integer) 10
RPUSHX key value
向列表右端添加元素,其他與LPUSHX相同
LPOP key
將左端列表元素彈出耽梅,會將其從列表中刪除薛窥,如果key不存在則返回(nil)
127.0.0.1:6379> LPOP list
"g"
127.0.0.1:6379> LPOP list
"c"
RPOP key
將右端列表元素彈出,其他同LPOP
LLEN key
返回列表的長度眼姐,如果列表不存在則返回0
127.0.0.1:6379> LLEN list
(integer) 8
127.0.0.1:6379> LLEN list1
(integer) 0
LRANGE key start end
獲取鏈表一個區(qū)間的值
127.0.0.1:6379> LRANGE list 0 -1
1) "b" // 獲得所有元素
2) "a"
3) "c"
4) "b"
5) "a"
6) "d"
7) "e"
8) "f
127.0.0.1:6379> LRANGE list 0 0
1) "b"
LREM key count value##
刪除列表中指定的值拆檬,返回值為刪除的元素的個數(shù),count值有以下幾種:
count > 0: 從列表的頭開始妥凳,向尾部搜索竟贯,移除與value相等的元素,移除count個
count < 0: 從列表尾部開始逝钥,向頭部搜索屑那,移除與value相等的元素,移除-count個
-
count == 0: 移除列表中所有與value相等的元素
127.0.0.1:6379> LPUSH list a b c d e f a b c d e f a b c d a b c d (integer) 20 127.0.0.1:6379> LLEN list (integer) 20 127.0.0.1:6379> LREM list 2 b (integer) 2 127.0.0.1:6379> LRANGE 0 1000 (error) ERR wrong number of arguments for 'lrange' command 127.0.0.1:6379> LRANGE list 0 1000 1) "d" 2) "c" 3) "a" 4) "d" 5) "c" 6) "a" 7) "f" 8) "e" 9) "d" 10) "c" 11) "b" 12) "a" 13) "f" 14) "e" 15) "d" 16) "c" 17) "b" 18) "a" 127.0.0.1:6379> LREM list 2 d (integer) 2 127.0.0.1:6379> LRANGE list 0 1000 1) "c" 2) "a" 3) "c" 4) "a" 5) "f" 6) "e" 7) "d" 8) "c" 9) "b" 10) "a" 11) "f" 12) "e" 13) "d" 14) "c" 15) "b" 16) "a" 127.0.0.1:6379> LREM list -2 a (integer) 2 127.0.0.1:6379> LRANGE list 0 1000 1) "c" 2) "a" 3) "c" 4) "a" 5) "f" 6) "e" 7) "d" 8) "c" 9) "b" 10) "f" 11) "e" 12) "d" 13) "c" 14) "b" 127.0.0.1:6379> LREM list 0 c (integer) 4 127.0.0.1:6379> LRANGE list 0 1000 1) "a" 2) "a" 3) "f" 4) "e" 5) "d" 6) "b" 7) "f" 8) "e" 9) "d" 10) "b" 127.0.0.1:6379> LREM list1 0 c (integer) 0
LINDEX key index
獲得指定索引元素的值艘款,如果索引超出范圍返回(nil),支持負數(shù)下標
127.0.0.1:6379> LINDEX list 2
"f"
127.0.0.1:6379> LINDEX list 100
(nil)
127.0.0.1:6379> LINDEX list -1
"b"
LSET key index value##
設(shè)置指定索引元素的值持际,如果列表不存在或者索引超出范圍報錯,支持負數(shù)下標
127.0.0.1:6379> LSET list 0 g
OK
127.0.0.1:6379> LINDEX list 0
"g"
127.0.0.1:6379> LINDEX list -1
"g"
127.0.0.1:6379> LSET list1 0 a
(error) ERR no such key
127.0.0.1:6379> LSET list 100 g
(error) ERR index out of range
LTRIM key start end
只保留列表片段哗咆,支持負數(shù)下標蜘欲,如果區(qū)間范圍超出所有范圍,則列表被清空
127.0.0.1:6379> LLEN list
(integer) 10
127.0.0.1:6379> LTRIM list 0 5
OK
127.0.0.1:6379> LLEN list
(integer) 6
127.0.0.1:6379> LRANGE list 0 100
1) "g"
2) "a"
3) "f"
4) "e"
5) "d"
6) "b"
127.0.0.1:6379> LTRIM list 4 -1
OK
127.0.0.1:6379> LRANGE list 0 100
1) "d"
2) "b"
127.0.0.1:6379> LTRIM list 100 1000
OK // 列表被清空
127.0.0.1:6379> LLEN list
(integer) 0
LINSERT key BEFORE|AFTER pivot value
向列表插入元素晌柬,如果列表中沒有pivot則什么都不做
127.0.0.1:6379> LRANGE list 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
8) "h"
9) "i"
10) "j"
11) "k"
127.0.0.1:6379> LINSERT list BEFORE b "redis"
(integer) 12
127.0.0.1:6379> LRANGE list 0 -1
1) "a"
2) "redis"
3) "b"
4) "c"
5) "d"
6) "e"
7) "f"
8) "g"
9) "h"
10) "i"
11) "j"
12) "k"
127.0.0.1:6379> LINSERT list BEFORE z "redis"
(integer) -1
RPOPLPUSH keysource keydestination##
將元素從一個列表轉(zhuǎn)到另一個列表姥份,返回pop的元素,如果原不存在則返回(nil)
127.0.0.1:6379> RPOPLPUSH list list1
"k"
127.0.0.1:6379> LRANGE list1 0 -1
1) "k"
127.0.0.1:6379> RPOPLPUSH list2 list1
(nil)
BLPOP key1 [key2 ] timeout
取出并獲取列表中的第一個元素年碘,或阻塞澈歉,直到有可用,任意個list有可用都會停止阻塞
如果list中有元素則與LPOP處理相同屿衅,如果list為空時埃难,會阻塞直到有可用的值,或者timeout,當timeout設(shè)定為0時會一直等待
127.0.0.1:6379> EXISTS list
(integer) 0
127.0.0.1:6379> BLPOP list 0
//本線程阻塞涡尘,在另外一個線程插入元素 LPUSH list a
1) "list"
2) "a"
(8.96s)
BRPOP key1 [key2 ] timeout
取出并獲取列表中的最后一個元素忍弛,或阻塞,直到有可用考抄,邏輯與BLPOP相同
BRPOPLPUSH source destination timeout
從source列表中彈出一個值剧罩,它推到destination列表并返回它;或阻塞,直到source中有可用座泳。