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命令阻塞,直到等待超时或发现可弹出元素为止。当给定多个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命令什么也不做。