目录
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
一、插入
1.向List中插入value
1)从左边插入
lpush mylist a
2)从右边插入
rpush mylist b
2.插入 value 在 pivot 前/后
linsert mylist [before|after] pivot value
有多个 pivot 时,在第一个处插入后就结束了
127.0.0.1:6379> rpush mylist 1 2 4 6
(integer) 4
127.0.0.1:6379> lrange mylist 0 3
1) "1"
2) "2"
3) "4"
4) "6"
127.0.0.1:6379> linsert mylist before 4 3
(integer) 5
127.0.0.1:6379> lrange mylist 0 4
1) "1"
2) "2"
3) "3"
4) "4"
5) "6"
二、查看列表元素 / 长度
3.查看 List 中的某一个 key 为 mylist 的 value
lrange mylist start end
执行以下代码进行插入:
127.0.0.1:6379> lpush mylist a
(integer) 1
127.0.0.1:6379> rpush mylist b
(integer) 2
127.0.0.1:6379> rpush mylist c d e
(integer) 5
127.0.0.1:6379> lpush mylist 0 1 2
(integer) 8
查看key 为 mylist 的 value ,从左到右和从右到左俩种方法都可以
(integer) 8
127.0.0.1:6379> lrange mylist 0 7
1) "2"
2) "1"
3) "0"
4) "a"
5) "b"
6) "c"
7) "d"
8) "e"
127.0.0.1:6379> lrange mylist -8 -1
1) "2"
2) "1"
3) "0"
4) "a"
5) "b"
6) "c"
7) "d"
8) "e"
如果查找范围大于实际长度会返回什么呢?
已知 mylist 中有 8 个元素,那么我查找从 0 - 10 :
127.0.0.1:6379> lrange mylist 0 10
1) "2"
2) "1"
3) "0"
4) "a"
5) "b"
6) "c"
7) "d"
8) "e"
根据以上我们发现返回的还是 mylist 中实际存在的数据。
4.查看列表的长度
llen mylist
(error) ERR unknown command 'lrenge'
127.0.0.1:6379> lrange mylist 0 5
1) "a"
2) "a"
3) "a"
4) "b"
127.0.0.1:6379> llen mylist
(integer) 4
三、删除 list 中的数据
5.弹出列表左边或右边的value
rpop mylist 弹出列表右边
lpop mylist 弹出列表左边
代码示例:
127.0.0.1:6379> rpop mylist
"e"
127.0.0.1:6379> lpop mylist
"2"
127.0.0.1:6379> lrange mylist 0 8
1) "1"
2) "0"
3) "a"
4) "b"
5) "c"
6) "d"
6.删除某value
lrem key count value
count 表示删除的数量,value 表示要删除的值,也就是删除 count 个 value
代码示例:
127.0.0.1:6379> lpush mylist d c b a a a b b
(integer) 8
127.0.0.1:6379> lrange mylist 0 7
1) "b"
2) "b"
3) "a"
4) "a"
5) "a"
6) "b"
7) "c"
8) "d"
127.0.0.1:6379> lrem mylist 2 b
(integer) 2
127.0.0.1:6379> lrange mylist 0 7
1) "a"
2) "a"
3) "a"
4) "b"
5) "c"
6) "d"
四、截取/获取
7.截取 list
ltrim key start end
代码示例:
(integer) 2
127.0.0.1:6379> lrange mylist 0 7
1) "a"
2) "a"
3) "a"
4) "b"
5) "c"
6) "d"
127.0.0.1:6379> ltrim mylist 0 3
OK
127.0.0.1:6379> lrange mylist 0 5
1) "a"
2) "a"
3) "a"
4) "b"
8.获取某一索引处的value
lindex key index
代码示例:
OK
127.0.0.1:6379> lrange mylist 0 5
1) "a"
2) "a"
3) "a"
4) "b"
127.0.0.1:6379> lindex mylist 3
"b"
五、从一个 list 中弹出 ,插入到另一个 list 中
9.从一个 list 中弹出 ,插入到另一个 list 中
rpoplpush source destination
使用场景:
一个列表(list1)放执行的元素,一个列表(list2)存放执行过后的元素,当列表要执行时,将这个元素从list1弹出,执行完插入到存放元素的列表list2中
127.0.0.1:6379> rpush list1 1 2 3
(integer) 3
127.0.0.1:6379> rpush list2 a b c
(integer) 3
127.0.0.1:6379> rpoplpush list2 list1
"c"
127.0.0.1:6379> lrange list1 0 10
1) "c"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> lrange list2 0 10
1) "a"
2) "b"
六、设置时间等待有value出现
10.设置时间等待有value出现
brpop key timeout //秒
lpush key value
使用场景:
接收 发送 消息场景,接收方等待,发送方发消息后,接收方在timeout时间内立马收到
打开俩个命令行窗口,一个等待value出现,一个插入 value
窗口一
127.0.0.1:6379> brpop list 60
???等窗口二插入 11 后会出现以下变化
127.0.0.1:6379> brpop list 60
1) "list"
2) "11"
(7.83s)
窗口二
127.0.0.1:6379> lpush list 11
(integer) 1