网站如何批量上传产品,好用的外贸网站,100人公司局域网搭建,启信宝企业查询入口在 Redis 中#xff0c;List 是一种非常常见的数据类型#xff0c;用于表示一个有序的字符串集合。与传统的链表结构类似#xff0c;Redis 的 List 支持在两端进行高效的插入和删除操作#xff0c;因此非常适合实现队列#xff08;Queue#xff09;和栈#xff08;Stack…在 Redis 中List 是一种非常常见的数据类型用于表示一个有序的字符串集合。与传统的链表结构类似Redis 的 List 支持在两端进行高效的插入和删除操作因此非常适合实现队列Queue和栈Stack等数据结构。
Redis List 的基本概念
有序的字符串集合List中的元素按插入顺序排列每个元素都是一个字符串。双端队列Redis List 是一个双端队列Deque允许你在列表的两端高效地进行操作插入和删除。最大长度Redis 的 List 数据类型没有最大长度限制理论上可以存储无限多的元素除非内存不足。
List命令 LPUSH LPUSH 命令用于将一个或多个元素插入到列表的头部即左侧。如果列表不存在Redis 会自动创建一个空列表并执行插入操作。 语法 LPUSH key value [value ...] 127.0.0.1:6379 lpush key 1 2 3 4
(integer) 4
127.0.0.1:6379 lrange key 0 -1
1) 4
2) 3
3) 2
4) 1返回值 返回插入元素后的列表长度。 LPUSHX LPUSHX 是一个用于将元素推入到列表list头部的命令但与 LPUSH 不同的是LPUSHX 只有在列表已存在的情况下才会执行操作。如果列表不存在LPUSHX 不会做任何操作也不会创建新的列表。 语法LPUSHX key value 127.0.0.1:6379 lpush key world
(integer) 1
127.0.0.1:6379 lpushx key hello
(integer) 2
127.0.0.1:6379 lpushx key2 hi
(integer) 0
127.0.0.1:6379 lrange key 0 -1
1) hello
2) world
127.0.0.1:6379 lrange key2 0 -1
(empty array)总结 LPUSHX 用于将元素添加到已经存在的列表中它不会创建新的列表这与 LPUSH无论列表是否存在都创建新列表有所不同。 RPUSH RPUSH 命令用于将一个或多个元素插入到列表的尾部即右侧。如果列表不存在Redis 会自动创建一个空列表并执行插入操作。 语法RPUSH key value [value ...] 127.0.0.1:6379 rpush key 1 2 3 4
(integer) 4
127.0.0.1:6379 rpush key 5 6 7 8
(integer) 8
127.0.0.1:6379 lrange key 0 -1
1) 1
2) 2
3) 3
4) 4
5) 5
6) 6
7) 7
8) 8返回值 返回插入元素后的列表长度。 RPUSHX 同理 LPUSHX
LRANGE LRANGE 命令用于获取列表中的一个指定范围的元素。你可以指定开始和结束的索引位置然后 Redis 会返回该范围内的所有元素。 语法LRANGE key start stop 127.0.0.1:6379 lrange key 0 -1
1) 1
2) 2
3) 3
4) 4
5) 5
6) 6
7) 7
8) 8
127.0.0.1:6379 lrange key 0 3
1) 1
2) 2
3) 3
4) 4
127.0.0.1:6379 lrange key 0 100
1) 1
2) 2
3) 3
4) 4
5) 5
6) 6
7) 7
8) 8
127.0.0.1:6379 lrange key 8 10
(empty array)
127.0.0.1:6379 lrange key -8 -1
1) 1
2) 2
3) 3
4) 4
5) 5
6) 6
7) 7
8) 8 返回值 返回指定范围内的所有元素。如果范围超出列表长度Redis 会返回所有符合范围条件的元素。 总结 LRANGE 用于获取 Redis 列表中指定范围的元素。支持负数索引可以从列表尾部获取元素。如果 start 和 stop 超出了列表的实际长度Redis 会自动调整范围。 LPOP LPOP 命令用于从列表的头部左侧移除并返回一个元素。执行该命令时列表的第一个元素会被移除并返回这个被移除的元素。如果列表为空LPOP 会返回 nil。 语法LPOP key 127.0.0.1:6379 rpush key 1 2 3 4
(integer) 4
127.0.0.1:6379 lpop key
1
127.0.0.1:6379 lpop key
2
127.0.0.1:6379 lpop key
3
127.0.0.1:6379 lpop key
4
127.0.0.1:6379 lpop key
(nil)返回值 返回被移除的列表元素。如果列表为空返回 nil。 总结 LPOP 是一个用于从 Redis 列表左侧移除并返回一个元素的命令。如果列表为空返回 nil。 RPOP 同理 RPOP 命令用于从列表的尾部右侧移除并返回一个元素。执行该命令时列表的最后一个元素会被移除并返回该元素。如果列表为空RPOP 会返回 nil。
LINDEX LINDEX 命令用于获取列表中指定位置的元素。你可以通过指定一个索引来获取列表中对应位置的元素。 语法LINDEX key index 127.0.0.1:6379 rpush key 1 2 3 4 5 6 7 8
(integer) 8
127.0.0.1:6379 lindex key 0
1
127.0.0.1:6379 lindex key 7
8
127.0.0.1:6379 lindex -1
127.0.0.1:6379 lindex key -1
8
127.0.0.1:6379 lindex key -7
2
127.0.0.1:6379 lindex key 9
(nil)返回值 返回指定位置的元素。 如果指定的索引超出了列表的范围返回 nil。 总结 LINDEX 用于获取 Redis 列表中指定位置的元素。可以通过正数索引或负数索引来指定位置。如果索引超出范围返回 nil。这是一个读取操作而不会改变列表内容 LINSERT LINSERT 命令用于在列表中指定位置插入一个元素。你可以在列表的 左侧 或 右侧 插入元素依据你指定的插入位置。语法LINSERT key BEFORE|AFTER pivot element 127.0.0.1:6379 rpush key a b c d
(integer) 4
127.0.0.1:6379 linsert key before b 111
(integer) 5
127.0.0.1:6379 linsert key after b 222
(integer) 6
27.0.0.1:6379 linsert key before e 333
(integer) -1
127.0.0.1:6379 lrange key 0 -1
1) a
2) 111
3) b
4) 222
5) c
6) d返回值 如果操作成功返回列表的新长度。 如果 pivot 元素在列表中不存在则不插入任何元素返回 -1。 总结 LINSERT 命令在 Redis 列表中指定位置插入一个新元素。可以在指定元素的 前 或 后 插入。它是一个修改列表的命令成功执行后返回新的列表长度如果指定的 pivot 元素不存在则返回 -1。 LLEN LLEN 命令用于获取列表的长度即列表中元素的数量。 语法LLEN key 127.0.0.1:6379 lrange key 0 -1
1) a
2) 111
3) b
4) 222
5) c
6) d
127.0.0.1:6379 llen key
(integer) 6
127.0.0.1:6379 llen key2
(integer) 0 返回值 返回列表中元素的数量。如果该 key 对应的不是一个列表或者该列表为空返回 0。 如果 key 不存在返回 0。 总结 LLEN 命令用于获取 Redis 列表的长度返回列表中元素的数量。如果列表为空或不存在返回 0。 阻塞版本命令 blpop 和 brpop 是 lpop 和 rpop 的阻塞版本和对应非阻塞版本的作用基本⼀致除了 • 在列表中有元素的情况下阻塞和⾮阻塞表现是⼀致的。但如果列表中没有元素非阻塞版本会理解返回 nil但阻塞版本会根据 timeout阻塞⼀段时间期间 Redis 可以执行其他命令但要求执行该命令的客户端会表现为阻塞状态如图 2-22 。 • 命令中如果设置了多个键那么会从左向右进⾏遍历键⼀旦有一个键对应的列表中可以弹出元素命令立即返回。 • 如果多个客户端同时多⼀个键执行 pop则最先执行命令的客户端会得到弹出的元素。 图 2-22 阻塞版本的 blpop 和 非阻塞版本 lpop 的区别 演示一下BLPOP BLPOP 命令是 阻塞式弹出Blocking Pop命令它用于从一个或多个列表中弹出一个元素。如果列表为空命令会阻塞直到有元素可弹出为止或者超时。 语法BLPOP key [key ...] timeout 此时再开一个服务器去增加key里面的元素 此时发现它在100内只有接收到key中是否有信息即可 返回值 如果成功弹出了元素返回一个列表包含两个元素 第一个元素是列表名称 key。 第二个元素是从该列表中弹出的值。 如果在 timeout 时间内没有元素可弹出命令返回 nil。 总结 BLPOP 是 Redis 中的阻塞式弹出命令可以从一个或多个列表中弹出元素。它会阻塞直到列表中有元素可供弹出或者超时。如果超时命令返回 nil。此命令常用于任务队列或消息队列的实现。 BRPOP同理BLPOP
List使用场景
消息队列 Redis 可以使用 lpush brpop 命令组合实现经典的阻塞式生产者-消费者模型队列 生产者客户端使用 lpush 从列表左侧插入元素多个消费者客户端使用 brpop 命令阻塞式地从队列中 争抢 队首元素。通过多个客户端来保证消费的负载均衡和高可用性。 结语 写博客不仅仅是为了分享学习经历同时这也有利于我巩固知识点总结该知识点由于作者水平有限对文章有任何问题的还请指出接受大家的批评让我改进。同时也希望读者们不吝啬你们的点赞收藏关注你们的鼓励是我创作的最大动力