Redis第6️⃣课 list
2019-04-28 本文已影响0人
小超_8b2f
一、特点
- 有序
- 可以重复
- 左右两边插入弹出
API
命令 | 解释 | 时间复杂度 |
---|---|---|
rpush key val1 [val2] | 从列表右端插入值(1-N个) | o(1~n) |
lpush key val1 [val2] | 从列表左端插入值(1-N个) | o(1~n) |
rpushx key value | 为已存在的列表添加值 | o(1) |
rpushx key value | 将一个值插入到已存在的列表头部 | o(1) |
linsert key before | after val newVal | 从列表右端插入值(1-N个) | o(n) |
lpop key | 从列表左侧弹出一个item | o(1) |
rpop key | 从列表右侧弹出一个item | o(1) |
lrem key n val | (1) n > 0 从左往右删,最多删n个val (2) n < 0 从右到左删,最多删n个val (3) n = 0 删除所有值为val的项 |
o(n) |
ltrim key start end [start, end] |
按照索引范围修剪列表 | o(n) |
lrange key start end (闭区间包含end) |
获取列表指定索引范围的所有item (1) 正向索引: 0 到 n-1 (2) 负向索引:-1 到 -n |
o(n) |
lindex key index | 获取列表指定索引的item | o(n) |
llen key | 获取列表长度 | o(1) |
lset key index newVal | 设置列表指定索引值为newVal | o(n) |
blpop key timeout | lpop的阻塞版本,生产者-消费者 timeout阻塞时间,=0时不阻塞 |
o(1) |
brpop key timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
o(1) |
rpoplpush from to | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
Tips
- lpush + lpop = Stack
- lpush + rpop = Queue
- lpush + ltrim = Capped Collection
- lpush + brpop = Message Queue
遍历集合
可以用lrange 做分页
127.0.0.1:6379> lpush list1 7 6 5 4 3 2 1
(integer) 7
127.0.0.1:6379> lrange list1 0 10 # 遍历所有:将end设个很大的数
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> lrange list1 0 2 # 取某范围
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange list1 1 -1 #start从左侧下标1取,一直到右侧数第1个
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
6) "7"
127.0.0.1:6379> lrange list1 0 -1 #获取所有元素:start从左侧下标0取,一直到右侧数第1个
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> lrange list1 5 -5 #获取从左数下标是5的元素一直到从右数第5个元素(无交集)
(empty list or set)
127.0.0.1:6379> lrange list1 -5 5 #获取从右侧数第5个元素,一直到从左数下标是5的元素
1) "3"
2) "4"
3) "5"
4) "6"
linsert 针对的是集合中首次出现的元素的前后进行插入
127.0.0.1:6379> rpush list2 a b c d #初始化list为a b c d
(integer) 4
127.0.0.1:6379> lrange list2 0 -1 #查看list
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> linsert list2 before c c #在第一个c元素的前面插入c
(integer) 5
127.0.0.1:6379> lrange list2 0 -1 #查看list
1) "a"
2) "b"
3) "c"
4) "c"
5) "d"
127.0.0.1:6379> linsert list2 before c java #在第一个c元素的前面插入java
(integer) 6
127.0.0.1:6379> lrange list2 0 -1 #查看list
1) "a"
2) "b"
3) "java"
4) "c"
5) "c"
6) "d"
127.0.0.1:6379> linsert list2 after c php #在第一个c元素的后面插入php
(integer) 7
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "java"
4) "c"
5) "php"
6) "c"
7) "d"
删除:lrem
127.0.0.1:6379> rpush list1 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> lrem list1 3 5
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "6"
6) "7"
127.0.0.1:6379> rpush list2 a b c d b c a c b
(integer) 9
127.0.0.1:6379> lrem list2 2 b
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "c"
3) "d"
4) "c"
5) "a"
6) "c"
7) "b"
127.0.0.1:6379> lrem list2 -2 c
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "c"
3) "d"
4) "a"
5) "b"
127.0.0.1:6379> lrem list 0 a
(integer) 0
127.0.0.1:6379> lrem list2 0 a
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "c"
2) "d"
3) "b"
ltrim :变成子集
127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "6"
6) "7"
127.0.0.1:6379> ltrim list1 1 -2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "3"
3) "4"
4) "6"
127.0.0.1:6379> ltrim list1 1 3
OK
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "4"
3) "6"
lindex list n :获取操作 list.get(n)
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "4"
3) "6"
127.0.0.1:6379> lindex list1 1
"4"
127.0.0.1:6379> lindex list1 2
"6"
127.0.0.1:6379>
lset:更新操作
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "4"
3) "6"
127.0.0.1:6379> lset list1 0 java
OK
127.0.0.1:6379> lrange list1 0 -1
1) "java"
2) "4"
3) "6"
127.0.0.1:6379> lset list1 5 java
(error) ERR index out of range
127.0.0.1:6379> lset list1 3 php
(error) ERR index out of range
127.0.0.1:6379> rpop list1
"6"
127.0.0.1:6379> lrange list1 0 -1
1) "java"
2) "4"
127.0.0.1:6379> lpop list1
"java"
127.0.0.1:6379> lrange list1 0 -1
1) "4"
list存在才添加元素
127.0.0.1:6379> lrange list1 0 -1
1) "4"
127.0.0.1:6379> lpushx list1 hello
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "4"
127.0.0.1:6379> rpush list1 world
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "4"
3) "world"
127.0.0.1:6379> rpush list3 hello world
(integer) 2
127.0.0.1:6379> rpushx list4 hello world
(integer) 0