List - 列表 ,底层的实现是链表,所以不推荐对中间操作

可以把他用作 栈 , 队列

一般List的操作,都会在操作前加一个’ l ‘或者 ‘ r ‘ , 其实很好理解’l’就表示左边进出;’r’就表示右边进出

进出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
flushdb
# lpush 左边进 rpush 右边进
lpush list1 one two three
# lrange 查看 (0 -1表示所有且左闭右闭)
lrange list1 0 0 # output three 可见lpush就是每次在左边塞入一个值 three two one
lrange list1 0 -1 # output three two one
#################################################################
flushdb # output : ok
keys * # output : list1
rpush list2 one two three # output: 3
lrange list2 0 0 # output one
lrange list2 0 -1 # output one two three 可见rpush就是每次在右边塞入一个值
keys * # output : one
##############################################################
# 已知 list2 one two three
# lpop 左边出第一个元素 rpop 右边出第一个元素
lpop list2 # one
rpop list2 # three
llen list2 # 1 因为已经弹出两个元素,加上我刚刚说过所有操作就是原有操作前面加len,剩下一个元素
lrange list2 0 -1 # two

获取列表长度

1
2
llen listName
# lindex list2

获取某个下标的值

1
2
lindex listName index
# lindex list2 0

移除指定的key

1
2
3
4
5
# 因为在list中是可以有重复的key的,所以需要标定remove的数量
# lrem key count value
# 上表中 list2 中有一个 two
lrem list2 1 two
# lrem list2 2 two ....

截取一段长度的key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ltrim listName index index 
# 比如说 0 - 10 我想要获取5-7的
flushall
# 重新开始
keys *
# nil
rpush list2 1 2 3 4 5 6 7 8 9 10
# output : 10
lrange list2 0 -1
# output : 1 2 3 4 5 6 7 8 9 10
ltrim list2 5 7
# output : 3
lrange list2 0 -1
# output : 5 6 7

列表间操作

1
2
3
4
5
6
7
8
9
10
11
12
# 移除列表1的元素 放到 列表2中
# rpoplpush list1 list2
flushdb
keys * # nil
rpush list1 0 1 2 3 4 5 6 7
rpush list2 zero one two three
lrange list1 0 -1 # 0 1 2 3 4 5 6 7
lrange list2 0 -1 # zero one two three
rpoplpush list1 list2 # 7
lrange list1 0 -1 # 0 1 2 3 4 5 6
lrange list2 0 -1 # 7 zero one two three
# 这里只能使用rpoplpush 并没有什么lpoprpush啥的,我也不知道为啥

判断列表是否存在

1
2
#其实这个就跟String一样
exists list1 # 1

普通的赋值更新(一般都以栈,队列的形式pop,push)

1
2
lset list index value 
# 这里如果一开始并没有这个index会报错,不多讲了

插入操作(速度慢)

1
2
# linsert listName before|after value1 value2 
# 把 value2 插入到value1的前面(before)或者后面(after)

最后

redis 是以 key-value的形式

所以哪怕你rpush list1 会自动生成一个列表,而这个列表是作为一个key,然后通过这个key去查找value

因此

1
2
3
4
flushdb
rpush list1 hahah
set name string
keys *

output :

[
{
“value”: “name”
},
{
“value”: “list1”
}
]

应用场景

消息队列