Redis 数据类型list(列表)

server/2024/10/17 18:29:51/

目录

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/server/131740.html

相关文章

computed和watch的区别

一、computed&#xff08;计算属性&#xff09; 1. 定义 计算属性是基于 Vue 实例的响应式数据进行计算的属性。它们的值会根据依赖的数据变化而自动更新&#xff0c;并且会被缓存&#xff0c;只有当其依赖的数据发生变化时才会重新计算。 2. 使用场景 衍生状态&#xff1a…

从零开始:用Python编写自己的简单游戏

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在编程的世界里,游戏开发一直是一个既充满乐趣又具有挑战性的领域。很多著名的游戏开发者在年轻时编写了他们的第一个简单游戏,点燃了他们的编程热情。在本文中,我们将带领你使用Python编写一个基础的2D游戏,…

docker简述

1.安装dockers&#xff0c;配置docker软件仓库 安装&#xff0c;可能需要开代理&#xff0c;这里我提前使用了下好的包安装 启动docker systemctl enable --now docker查看是否安装成功 2.简单命令 拉取镜像&#xff0c;也可以提前下载使用以下命令上传 docker load -i imag…

Leetcode 不同路径

重要的一点在于&#xff1a;只能向右或向下移动。 这段代码的算法思想是使用**动态规划&#xff08;Dynamic Programming, DP&#xff09;**来解决问题。其核心思想是通过将问题分解成更小的子问题&#xff0c;并用一个二维数组来保存这些子问题的解&#xff0c;从而避免重复计…

FFmpeg的简单使用【Windows】--- 视频混剪+添加背景音乐

一、功能描述 点击背景音乐区域的【选择文件】按钮&#xff0c;选择音频文件并将其上传到服务器&#xff0c;上传成功后会将其存储的位置路径返回。 然后&#xff0c;点击要处理视频区域的【选择文件】按钮选择要进行混剪的视频素材&#xff08;1-10个&#xff09;。 以上两…

上半年净利下滑85%,光峰科技能否靠“上车”扭转局面?

尽管车载业务环比增了3倍&#xff0c;光峰科技今年上半年的净利润依然同比下滑了85%。 根据光峰科技发布的半年报显示&#xff0c;今年上半年&#xff0c;光峰科技营业收入为10.81亿元&#xff0c;同比微增0.76%&#xff1b;实现归属上市公司股东的净利润为1090.96万元&#x…

2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数

2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数 2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数 文章目录 2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数KfRaiseIrql 函数 KfRaiseIrql 函数 /*********************************************************************** NAME …

如何管理和维护自动化测试

将测试数据、测试脚本和测试结果进行有效的管理和维护是软件测试过程中的重要任务&#xff0c;它直接关系到测试的质量和效率。以下是对这三个方面分别进行管理和维护的具体建议&#xff1a; 一、测试数据的管理和维护 1. 数据收集 来源选择&#xff1a;测试数据主要来源于生…