redis学习(4)—操作list类型命令

1、什么是list类型数据
list类型是一个双端链表的结构,容量是2的32次方减1个元素,即40多亿个
其主要功能有push、pop、获取元素等,一般应用在栈、队列、消息队列等场景

2、[LR]PUSH命令
以头插或尾插方式插入指定key队列中一个或多个元素
语法:[LR]PUSH key value1 [value2 …]
说明:L和R就是左和右,指从头还是从尾开始
例子:
lpush products 1 2 3

3、LRANGE命令
获取列表指定范围内的元素
语法:LRANGE key start stop
说明:start是开始位置从0开始,stop是结束位置,-1表示到链表结尾
例子:
lrange products 0 -1
1) “3”
2) “2”
3) “1”
可以看到读取时是先进后出,当成栈的结构读取

4、LINSERT命令
在列表指定元素前或者后插入元素
语法:LINSERT key BEFORE|AFTER pivot value
说明:
当pivot不存在于列表key时,不执行任何操作。
当key不存在时,key被视为空列表,不执行任何操作。
例子:
linsert products before 4 a
(integer) 7
lrange products 0 -1
1) “6”
2) “5”
3) “a”
4) “4”
5) “3”
6) “2”
7) “1”

5、LLEN命令
获取列表长度
语法:LLEN key
例子:
llen products
(integer) 7

6、LINDEX命令
通过索引获取列表中的元素
语法:LINDEX key index
下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
可以从前往后获取,也可以从后往前获取

7、LSET命令
通过索引设置列表元素的值
语法:LSET key index value
例子;
lset products 6 b
OK
lrange products 0 -1
1) “6”
2) “5”
3) “a”
4) “4”
5) “3”
6) “2”
7) “b”

8、LTRIM命令
截取队列指定区间的元素,其余元素都删除
语法:LTRIM key start end
例子:
lpush test h e l l o
(integer) 5
lrange test 0 -1
1) “o”
2) “l”
3) “l”
4) “e”
5) “h”
ltrim test 1 3
OK
lrange test 0 -1
1) “l”
2) “l”
3) “e”

9、LREM命令
移除列表元素
语法:LREM key count value
根据参数count的值,移除列表中与参数value相等的元素
count的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为count。
count < 0 : 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
count = 0 : 移除表中所有与value相等的值。
例子:
rpush test2 who am i
(integer) 3
lrem test2 1 am
(integer) 1
lrange test2 0 -1
1) “who”
2) “i”

10、[LR]POP命令
从队列的头或末尾弹出节点元素(返回该元素并从队列中删除)
命令:[LR]POP key
例子:
lpop test2
“who”

11、RPOPLPUSH命令
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
语法:RPOPLPUSH source destination
举个例子,你有两个列表source和destination,source列表有元素a、b、c,destination列表有元素x、y、z,执行RPOPLPUSH source destination之后,source列表包含元素a、b,destination列表包含元素c、x、y、z,并且元素c会被返回给客户端。

12、B[LR]POP命令
移出并获取列表的第一个或最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
语法:B[LR]POP key1 [key2 …] timeout
超时参数timeout接受一个以秒为单位的数字作为值
例子:
BLPOP job 30
(nil)
(30.58s)
另一种情况:
BLPOP job 30
1) “job” #弹出元素所属的列表
2) “teacher” #弹出元素所属的值
(4.39s) #阻塞时间
lpush job teacher
(integer) 1
其他:此外BRPOPLPUSH也有阻塞版本,弹出都可以阻塞