Redis之List类型的详解&List类型中常用命令的实践
知识回顾:
通过对Redis中的String的命令做了充分的讲解以及实践学习
通过对Redis中String类型之Bit命令的详解以及Bit命令的实践进行了学习接下来的学习任务:
接下来我们学习Redis中的Hash类型以及Hash中常用命令的实践学习。
Redis中String类型内容请看这里呦:
【Redis之String类型的详解&String类型中常用命令的实践】
Redis中String类型是Bit命令内容请看这里呦:
【Redis中String类型之Bit命令的详解&Bit命令的实践】
Redis之Hash类型的详解&Hash类型中常用命令的实践请看这里呦:
【Redis之Hash类型的详解&Hash类型中常用命令的实践】
Redis中List的介绍
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
Redis中List的基本命令结构
list的基本命令 key的值 集合的元素
Redis中List的常用命令
List常用命令 | 备注说明 |
---|---|
lpush | 向列表头部添加一个或多个元素 |
lrange | 获取列表中指定的元素0第一个,-1最后一个 |
rpush | 向列表尾部添加一个或多个元素 |
llen | 获取列表长度 |
lset | 通过index设置列表的值 |
rpop | 移除列表最后一个元素,并返回 |
lpop | 移除列表头部元素,并返回 |
lindex | 获取列表中对应下标的值 |
ltrim | 截取列表对应的元素 |
blpop | lpop的阻塞版 |
brpop | rpop的阻塞版 |
rpoplpush | 移除一个列表的最后一个元素,并将该元素添加到另一个列表的头部 |
brpoplpush | rpoplpush的阻塞版本 |
lpush命令
lpush将所有指定的值插入到存于 key 的列表的头部。
如果 key 不存在,那么在进行 push 操作前会创建一个空列表,然后再将元素插入到集合中。
如果key是存在的,那么直接在key对应的集合中添加元素。
返回的结果是插入的元素个数。
127.0.0.1:6379> lpush classid 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lpush classid 7 8
(integer) 7
127.0.0.1:6379>
lrange命令
从列表中获取指定区间的元素。
start 和 end 偏移量都是基于0的下标,list的下标是从0开始的。
偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如,-1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。
127.0.0.1:6379> lrange classid 0 -1
1) "8"
2) "7"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lrange classid 0 6
1) "8"
2) "7"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lrange classid -1 -5
(empty array)
127.0.0.1:6379> lrange classid -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379>
rpush命令
rpush命令和lpush的命令是一样的。只是从链表放入元素的方向不同。
将所有指定的值插入到存于 key 的列表的尾部。
如果 key 不存在,那么在进行 push 操作前会创建一个空列表,然后再将元素插入到集合中。
如果key是存在的,那么直接在key对应的集合中添加元素。
返回的结果是插入的元素个数。
127.0.0.1:6379> rpush classid1 7 6 5 4 3 2 1
(integer) 7
127.0.0.1:6379>
llen命令
获取列表的长度。
127.0.0.1:6379> llen classid
(integer) 7
127.0.0.1:6379> llen classid1
(integer) 7
127.0.0.1:6379>
lset命令
通过下标设置列表对应的下标的值。
127.0.0.1:6379> lrange classid 0 -1
1) "8"
2) "7"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lset classid 0 9
OK
127.0.0.1:6379> lrange classid 0 -1
1) "9"
2) "7"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379>
lpop命令
lpop命令,移除的是头部的元素。
127.0.0.1:6379> lrange classid 0 -1
1) "9"
2) "7"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lpop classid
"9"
127.0.0.1:6379> lpop classid
"7"
127.0.0.1:6379> lrange classid 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379>
rpop命令
rpop命令,移除的是尾部的元素。
127.0.0.1:6379> lrange classid 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpop classid
"1"
127.0.0.1:6379> rpop classid
"2"
127.0.0.1:6379> lrange classid 0 -1
1) "5"
2) "4"
3) "3"
127.0.0.1:6379>
lindex命令
lindex命令返回key中对应的index的下标的值。0表示第一个,-1表示最后一个。以此类推。。
127.0.0.1:6379> lrange classid 0 -1
1) "5"
2) "4"
3) "3"
127.0.0.1:6379> lindex classid 0
"5"
127.0.0.1:6379> lindex classid 1
"4"
127.0.0.1:6379> lindex classid -1
"3"
127.0.0.1:6379> lindex classid -2
"4"
127.0.0.1:6379>
ltrim命令
ltrim截取列表中的部分元素。0第一个,-1最后一个,以此类推。
没有截取的元素直接舍弃。
127.0.0.1:6379> lrange classid 0 -1
1) "5"
2) "4"
3) "3"
127.0.0.1:6379> ltrim classid 0 1
OK
127.0.0.1:6379> lrange classid 0 -1
1) "5"
2) "4"
127.0.0.1:6379>
blpop命令
blpop是阻塞式列表的弹出原语。 它是命令 lpop的阻塞版本。
当给定列表内没有任何元素可供弹出的时候, 连接将被 blpop命令阻塞。
当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。
同时在使用此命令的时候也需要指定过期时间,单位是秒。返回的接口是key和列表元素值
127.0.0.1:6379> lrange classid 0 -1
1) "5"
2) "4"
127.0.0.1:6379> blpop classid 15
1) "classid"
2) "5"
127.0.0.1:6379> blpop classid 15
1) "classid"
2) "4"
127.0.0.1:6379> blpop classid 15
^[[A(nil)
(15.03s)
127.0.0.1:6379>
brpop命令
brpop是阻塞式列表的弹出原语。 它是命令 rpop 的阻塞版本。
当给定列表内没有任何元素可供弹出的时候, 连接将被 brpop命令阻塞。
当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。
同时在使用此命令的时候也需要指定过期时间,单位是秒。返回的接口是key和列表元素值
127.0.0.1:6379> rpush classid 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange classid 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> brpop classid 5
1) "classid"
2) "4"
127.0.0.1:6379> brpop classid 5
1) "classid"
2) "3"
127.0.0.1:6379> brpop classid 5
1) "classid"
2) "2"
127.0.0.1:6379> brpop classid 5
1) "classid"
2) "1"
127.0.0.1:6379> brpop classid 5
(nil)
(5.09s)
127.0.0.1:6379>
rpoplpush命令
原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)
127.0.0.1:6379> rpush classid 1 2 3 4
(integer) 4
127.0.0.1:6379> rpush word a b c d
(integer) 4
127.0.0.1:6379> lrange classid 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> lrange word 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpoplpush classid word
"4"
127.0.0.1:6379> lrange classid 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange word 0 -1
1) "4"
2) "a"
3) "b"
4) "c"
5) "d"
brpoplpush命令
brpoplpush是rpoplpush的阻塞版,如果没有移除的数据就会阻塞到有数据或者timeout。
127.0.0.1:6379> brpoplpush classid word 5
"3"
127.0.0.1:6379> brpoplpush classid word 5
"2"
127.0.0.1:6379> brpoplpush classid word 5
"1"
127.0.0.1:6379> brpoplpush classid word 5
(nil)
(5.07s)
127.0.0.1:6379>