Redis 数据类型list(列表)

devtools/2024/10/18 19:24:06/

目录

1 基本特性

2 主要操作命令

2.1 LPUSH key value [value ...]

2.2 RPUSH key value [value ...]

2.3 LRANGE key start stop

2.4 LINDEX key index

2.5 LLEN key

2.6 LPOP key

2.7 RPOP key

2.8 LTRIM key start stop

2.9 BLPOP key [key ...] timeout

2.10 BRPOP key [key ...] timeout

2.11 LINSERT key BEFORE|AFTER pivot value

2.12 LSET key index value  

2.13 RPOPLPUSH source destination 

2.14 LREM key count value 


Redis 的列表(List)是一种数据结构,它按照插入顺序存储字符串元素。列表是有序的,这意味着元素在列表中的位置是有意义的,并且可以被索引。列表非常适合用来实现队列和栈这样的数据结构。以下是 Redis 列表的一些主要特性和操作:

1 基本特性

  • 有序集合:列表中的元素按照插入顺序排序。
  • 元素类型:列表中的每个元素都是字符串,但这些字符串可以包含任何二进制数据,包括序列化的其他数据结构。
  • 动态大小:列表的长度是可以变化的,可以根据需要添加或删除元素。
  • 高效访问:可以在 O(1) 时间内访问列表两端的元素,但是访问中间元素的时间复杂度为 O(N)。
  • 内存优化:Redis 会尝试对小整数进行编码以节省空间。
  • 列表长度:理论上,每个列表最多可以存储 2^32 - 1 个元素(超过40亿个),因为列表内部使用的是一个双向链表结构。

2 主要操作命令

2.1 LPUSH key value [value ...]

将一个或多个值插入到列表的头部(左边)。

127.0.0.1:6379> lpush name java
(integer) 1
127.0.0.1:6379> lpush name python
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "python"
2) "java"
2.2 RPUSH key value [value ...]

将一个或多个值插入到列表的尾部(右边)。

127.0.0.1:6379> rpush name c++
(integer) 3
127.0.0.1:6379> lrange name 0 -1
1) "python"
2) "java"
3) "c++"
2.3 LRANGE key start stop

获取列表中从 start 到 stop 之间的所有元素(包含 start 和 stop 位置上的元素)。为了获取整个列表,你可以设置起始索引为 0(列表的第一个元素),结束索引为 -1(列表的最后一个元素)。

127.0.0.1:6379> lrange name 0 -1
1) "python"
2) "java"
3) "c++"
2.4 LINDEX key index

获取列表中指定索引处的元素(0 是列表的第一个元素,-1 是最后一个元素)。

127.0.0.1:6379> lindex name 2
"c++"
2.5 LLEN key

返回列表的长度。

127.0.0.1:6379> llen name
(integer) 3
2.6 LPOP key

移除并返回列表的第一个元素(从左端)。

127.0.0.1:6379> lrange name 0 -1
1) "python"
2) "java"
3) "c++"
127.0.0.1:6379> lpop name
"python"
127.0.0.1:6379> lrange name 0 -1
1) "java"
2) "c++"
2.7 RPOP key

移除并返回列表的最后一个元素(从右端)。

127.0.0.1:6379> lrange name 0 -1
1) "java"
2) "c++"
127.0.0.1:6379> rpop name
"c++"
127.0.0.1:6379> lrange name 0 -1
1) "java"
2.8 LTRIM key start stop

保留列表中从 start 到 stop 之间的元素,移除其它所有元素。

127.0.0.1:6379> lrange name 0 -1
1) "python"
2) "c++"
3) "go"
4) "java"
127.0.0.1:6379> ltrim name 1 2
OK
127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "go"
2.9 BLPOP key [key ...] timeout

阻塞版本的 LPOP,如果列表为空,则阻塞连接直到有新的元素被添加到列表或者超时。

127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "go"
127.0.0.1:6379> blpop name 5
1) "name"
2) "c++"
127.0.0.1:6379> lrange name 0 -1
1) "go"
127.0.0.1:6379> blpop user 5
(nil)
(5.07s)
2.10 BRPOP key [key ...] timeout

阻塞版本的 RPOP,行为与 BLPOP 类似,但是从列表的右端弹出元素。

127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "go"
127.0.0.1:6379> brpop name 5
1) "name"
2) "go"
127.0.0.1:6379> lrange name 0 -1
1) "c++"
2.11 LINSERT key BEFORE|AFTER pivot value

将 value 插入到列表中 pivot 元素之前或之后,如果 pivot 不存在于列表中,则不进行任何操作。

127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "go"
3) "python"
4) "java"
127.0.0.1:6379> linsert name after python .net
(integer) 5
127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "go"
3) "python"
4) ".net"
5) "java"
127.0.0.1:6379> linsert name before go js
(integer) 6
127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "js"
3) "go"
4) "python"
5) ".net"
6) "java"
127.0.0.1:6379> linsert name after c# rube
(integer) -1
127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "js"
3) "go"
4) "python"
5) ".net"
6) "java"
2.12 LSET key index value  

设置列表中指定索引位置的元素为新值,如果索引超出范围,则返回错误。

127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "js"
3) "go"
4) "python"
5) ".net"
6) "java"
127.0.0.1:6379> lset name 1 basic
OK
127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "basic"
3) "go"
4) "python"
5) ".net"
6) "java"
127.0.0.1:6379> lset name 7 basic
(error) ERR index out of range
2.13 RPOPLPUSH source destination 

原子地执行两个操作,移除列表的最后一个元素,并将该元素添加到另一个列表并返回,这对于实现队列间的原子移动非常有用。

127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "basic"
3) "go"
4) "python"
5) ".net"
6) "java"
127.0.0.1:6379> lrange name1 0 -1
1) "html"
2) "ts"
3) "js"
127.0.0.1:6379> rpoplpush name name1
"java"
127.0.0.1:6379> lrange name 0 -1
1) "c++"
2) "basic"
3) "go"
4) "python"
5) ".net"
127.0.0.1:6379> lrange name1 0 -1
1) "java"
2) "html"
3) "ts"
4) "js"
2.14 LREM key count value 

从列表中移除等于给定值的元素,count 参数决定了删除多少个匹配的元素:

  • count > 0:从头到尾搜索,移除 count 个匹配的元素。
  • count < 0:从尾到头搜索,移除 -count 个匹配的元素。
  • count = 0:移除所有匹配的元素。
127.0.0.1:6379> lrange number 0 -1
1) "5"
2) "4"
3) "3"
4) "3"
5) "6"
6) "5"
7) "4"
8) "3"
127.0.0.1:6379> lrem number -2 3
(integer) 2
127.0.0.1:6379> lrange number 0 -1
1) "5"
2) "4"
3) "3"
4) "6"
5) "5"
6) "4"
127.0.0.1:6379> lrem number 1 4
(integer) 1
127.0.0.1:6379> lrange number 0 -1
1) "5"
2) "3"
3) "6"
4) "5"
5) "4"
127.0.0.1:6379> lrem number 0 5
(integer) 2
127.0.0.1:6379> lrange number 0 -1
1) "3"
2) "6"
3) "4"

更多命令请参考:Commands | Docs


http://www.ppmy.cn/devtools/124103.html

相关文章

Spring Boot洗衣店订单系统:简化您的业务流程

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解

目录 1、NIO 2、NIO 和 IO 的区别 1. 阻塞 vs 非阻塞 2. 一个线程 vs 多个连接 3. 面向流 vs 面向缓冲 4. 多路复用 3、Channel & Buffer (1&#xff09;Channel&#xff1a;双向通道 (2&#xff09;Buffer&#xff1a;缓冲区 (3&#xff09;ByteBuffer&#xff…

彩族相机内存卡恢复多种攻略:告别数据丢失

在数字时代&#xff0c;相机内存卡作为我们存储珍贵照片和视频的重要媒介&#xff0c;其数据安全性显得尤为重要。然而&#xff0c;意外删除、错误格式化、存储卡损坏等情况时有发生&#xff0c;导致数据丢失&#xff0c;给用户带来不小的困扰。本文将详细介绍彩族相机内存卡数…

新电脑 Windows 系统初始配置

文章目录 前言1 前置配置2 安装软件2.1 通讯工具2.2 后端开发工具2.3 硬件开发工具2.4 前端开发工具2.4 其它工具 3 Windows 11 优化4 写在最后 前言 分区&#xff08;个人习惯&#xff09;&#xff1a;1TB SSD 分为 2 个分区&#xff0c;一个 256GB 分区为系统盘&#xff0c;剩…

重生之我在代码随想录刷算法第二十一天 | 93.复原IP地址、78.子集、 90.子集II

参考文献链接&#xff1a;代码随想录 本人代码是Java版本的&#xff0c;如有别的版本需要请上代码随想录网站查看。 93.复原IP地址 力扣题目链接 解题思路 这道题目感觉跟昨天的分割回文串很像。 首先明确思路&#xff0c;先是一个一个字符去添加到StringBuilder&#xf…

2024中国新媒体技术展 | 蓝海创意云vLive虚拟直播即将亮相!

​​ 2024中国新媒体大会由中央宣传部指导&#xff0c;中华全国新闻工作者协会、湖南省人民政府联合主办&#xff0c;旨在推动媒体深度融合发展&#xff0c;促进新闻事业高质量发展&#xff0c;为中国式现代化贡献力量。中国新媒体技术展&#xff08;CMTE&#xff09;是中国新…

力扣977.有序数组的平方

题目链接&#xff1a;977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,…

鸿蒙架构-系统架构师(七十八)

1信息加密是保证系统机密性的常用手段。使用哈希校验是保证数据完整性的常用方法。可用性保证合法用户对资源的正常访问&#xff0c;不会被不正当的拒绝。&#xff08;&#xff09;就是破坏系统的可用性。 A 跨站脚本攻击XSS B 拒绝服务攻击DoS C 跨站请求伪造攻击CSRF D 缓…