列表命令——Redis学习笔记

Redis列表是简单的字符串列表,排序插入顺序。可以在头部或列表的尾部Redis的列表添加元素。

1:LPUSH key value1 [value2]
在列表头部加上一个或多个值 (先进后出)

1
2
3
4
5
127.0.0.1:6379> lpush mylist hello world
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "world"
2) "hello"

2:RPUSH key value1 [value2]
在列表尾部部加上一个或多个值(先进先出)

1
2
3
4
5
127.0.0.1:6379> rpush list2 hello world
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "hello"
2) "world"

3:LPOP key
获取并取出列表中的第一个元素

1
2
3
4
5
6
7
8
9
10
11
rpush list3 one two three
(integer) 3
127.0.0.1:6379> lrange list3 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> lpop list3
"one"
127.0.0.1:6379> lrange list3 0 -1
1) "two"
2) "three"

4:RPOP key
取出并获取列表中的最后一个元素

1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> rpush list4 one two three
(integer) 3
127.0.0.1:6379> lrange list4 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> rpop list4
"three"
127.0.0.1:6379> lrange list4 0 -1
1) "one"
2) "two"

5:LINDEX key index
从一个列表其索引获取对应的元素

1
2
3
4
127.0.0.1:6379> lpush list5 one two three
(integer) 3
127.0.0.1:6379> lindex list5 1
"two"

6:LLEN key
获取列表的长度

1
2
127.0.0.1:6379> llen list5
(integer) 3

7:LPUSHX key value
在一个存在的列表的头部插入一个值(必须是一个存在的列表)

1
2
3
4
5
6
7
127.0.0.1:6379> lpush list9 aaaa
(integer) 1
127.0.0.1:6379> lpushx list9 bbb
(integer) 2
127.0.0.1:6379> lrange list9 0 -1
1) "bbb"
2) "aaaa"

8:LSET key index value
在列表中的索引设置一个元素的值 (必须是已存在的索引)

1
2
3
4
5
6
7
8
127.0.0.1:6379> lpush list10 one two three
(integer) 3
127.0.0.1:6379> lset list10 0 four
OK
127.0.0.1:6379> lrange list10 0 -1
1) "four"
2) "two"
3) "one"

9:LRANGE key start stop
从一个列表获取指定长度的元素

1
2
3
4
5
6
7
127.0.0.1:6379> lrange list10 0 -1
1) "four"
2) "two"
3) "five"
127.0.0.1:6379> lrange list10 0 1
1) "four"
2) "two"

10:LREM key count value
从列表中删除 值为value的固定个数的元素,如果count为正数,从头部开始删除,如果为负数,从尾部开始删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
127.0.0.1:6379> rpush list12 one one two one three four one
(integer) 7
127.0.0.1:6379> lrange list12 0 -1
1) "one"
2) "one"
3) "two"
4) "one"
5) "three"
6) "four"
7) "one"
127.0.0.1:6379> lrem list12 2 one
(integer) 2
127.0.0.1:6379> lrange list12 0 -1
1) "two"
2) "one"
3) "three"
4) "four"
5) "one"
127.0.0.1:6379> lrem list12 -1 one
(integer) 1
127.0.0.1:6379> lrange list12 0 -1
1) "two"
2) "one"
3) "three"
4) "four"

11:LTRIM key start stop
修剪列表到指定的范围内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> rpush list13 one two three four five
(integer) 5
127.0.0.1:6379> lrange list13 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> ltrim list13 1 3
OK
127.0.0.1:6379> lrange list13 0 -1
1) "two"
2) "three"
3) "four"

12:RPUSHX key value
在一个存在的列表的尾部插入一个值(必须是一个存在的列表)

1
2
3
4
5
6
127.0.0.1:6379> rpush list14 aaaa
(integer) 1
127.0.0.1:6379> rpushx list14 bbbb
(integer) 2
127.0.0.1:6379> rpushx list15 bbbb
(integer) 0

13:RPOPLPUSH source destination
删除一个列表最后一个元素,并将其附加到另一个列表的头部,并返回该元素

1
2
3
4
5
6
7
8
9
10
11
12
127.0.0.1:6379> rpush mylist1 one two
(integer) 2
127.0.0.1:6379> rpush mylist2 three four
(integer) 2
127.0.0.1:6379> rpoplpush mylist1 mylist2
"two"
127.0.0.1:6379> lrange mylist1 0 -1
1) "one"
127.0.0.1:6379> lrange mylist2 0 -1
1) "two"
2) "three"
3) "four"

14:LINSERT key BEFORE|AFTER pivot value
在列表中的其他元素之后或之前插入一个元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
127.0.0.1:6379> lrange mylist2 0 -1
1) "two"
2) "three"
3) "four"
127.0.0.1:6379> linsert mylist2 before three five
(integer) 4
127.0.0.1:6379> lrange mylist2 0 -1
1) "two"
2) "five"
3) "three"
4) "four"
127.0.0.1:6379> linsert mylist2 after three six
(integer) 5
127.0.0.1:6379> lrange mylist2 0 -1
1) "two"
2) "five"
3) "three"
4) "six"
5) "four"

15:BLPOP key1 [key2 ] timeout
取出指定列表的第一个元素,如果有则返回,没有一定时间后返回nil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
127.0.0.1:6379> del list1 list2
(integer) 0
127.0.0.1:6379> rpush list1 a b
(integer) 2
127.0.0.1:6379> rpush list2 c
(integer) 1
127.0.0.1:6379> blpop list1 list2 10
1) "list1"
2) "a"
127.0.0.1:6379> blpop list1 list2 10
1) "list1"
2) "b"
127.0.0.1:6379> blpop list1 list2 10
1) "list2"
2) "c"
127.0.0.1:6379> blpop list1 list2 10
(nil)
(10.08s)

16:BRPOP key1 [key2 ] timeout
取出指定列表的最后一个元素,如果有则返回,没有一定时间后返回nil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
127.0.0.1:6379> del list1 list2
(integer) 0
127.0.0.1:6379> rpush list1 a b
(integer) 2
127.0.0.1:6379> rpush list2 c
(integer) 1
127.0.0.1:6379> brpop list1 list2 10
1) "list1"
2) "b"
127.0.0.1:6379> brpop list1 list2 10
1) "list1"
2) "a"
127.0.0.1:6379> brpop list1 list2 10
1) "list2"
2) "c"
// 十秒后返回nil
127.0.0.1:6379> brpop list1 list2 10
(nil)
(10.01s)

17:BRPOPLPUSH source destination timeout
取出指定列表的最后一个元素,追加到另一个列表的开头,如果有则追加并返回,没有一定时间后返回nil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
127.0.0.1:6379> del list1 list2
(integer) 0
127.0.0.1:6379> rpush list1 a b
(integer) 2
127.0.0.1:6379> rpush list2 c d
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "a"
2) "b"
127.0.0.1:6379> lrange list2 0 -1
1) "c"
2) "d"
127.0.0.1:6379> brpoplpush list1 list2 10
"b"
127.0.0.1:6379> brpoplpush list1 list2 10
"a"
127.0.0.1:6379> brpoplpush list1 list2 10
(nil)
(10.04s)
127.0.0.1:6379> lrange list1 0 -1
(empty list or set)
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"