Redis 7.x 系列【7】数据类型之列表(List)

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 概述
    • 2. 常用命令
      • 2.1 RPUSH
      • 2.2 LPUSH
      • 2.3 LRANGE
      • 2.4 LINDEX
      • 2.6 LREM
      • 2.7 LLEN
      • 2.8 LPOP
      • 2.9 RPOP
      • 2.10 LSET
    • 3. 应用场景

1. 概述

Redis List(列表)是一种基于双向链表的数据结构,允许包含重复的元素,支持在列表的头部和尾部添加或删除元素。
在这里插入图片描述

2. 常用命令

List 相关的所有命令:

命名描述
LMOVE删除源列表的第一个或最后一个元素,并移入到目标列表中的第一个或最后一个位置
LMPOP弹出一个或多个元素
BLMOVELMOVE的阻塞变体
BLMPOPLMPOP的阻塞变体
BLPOP移出并获取列表的第一个元素
BRPOP移出并获取列表的最后一个元素
BRPOPLPUSH从列表中弹出一个值,并将该值插入到另外一个列表中并返回它
LINDEX通过索引获取列表中的元素
LINSERT在列表的元素前或者后插入元素
LLEN获取列表长度
LPOP移出并获取列表的第一个元素
LPOS返回列表中匹配元素的索引
LPUSH将一个或多个值插入到列表头部
LPUSHX将一个值插入到已存在的列表头部
LRANGE获取列表指定范围内的元素
LREM移除列表元素
LSET通过索引设置列表元素的值
LTRIM对一个列表进行修剪
RPOP移除并获取列表最后一个元素
RPOPLPUSH移除列表的最后一个元素,并将该元素添加到另一个列表并返回
RPUSH在列表中添加一个或多个值
RPUSHX为已存在的列表添加值

2.1 RPUSH

RPUSH 向存存储在 key 中的列表的尾部插入所有指定的值(多个时依次从左到右按序从列表尾部插入)。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 返回值为执行操作后的列表长度,当 key 保存的不是列表,那么会返回一个错误。

基本语法:

RPUSH key element [element ...]

示例:

redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "world"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"

2.2 LPUSH

LPUSH 用于将一个或多个值插入到列表的头部,返回值为执行操作后列表的长度。

注意事项:

  • 如果 key 不存在,那么在进行 push 操作前会创建一个空列表。
  • 如果 key 对应的值不是 List 类型,那么会返回一个错误。
  • 可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素按在参数中出现的顺序,从左到右依次插入到 list 的头部。

基本语法:

LPUSH key element [element ...]

示例:

redis> LPUSH mylist "world"
(integer) 1
redis> LPUSH mylist "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"

2.3 LRANGE

LRANGE用于返回列表中指定区间内的元素,区间以偏移量 STARTEND 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

基本语法:

LRANGE key start stop

注意事项:

  • stop 下标也在 LRANGE 命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,例如执行 LRANGE list 0 10 ,结果是一个包含 11 个元素的列表
  • 超出范围的下标值不会引起错误,例如 start 下标比列表的最大下标还要大时,那么会返回一个空列表。

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LRANGE mylist 0 0
1) "one"
redis> LRANGE mylist -3 2
1) "one"
2) "two"
3) "three"
redis> LRANGE mylist -100 100
1) "one"
2) "two"
3) "three"
redis> LRANGE mylist 5 10
(empty list or set)

2.4 LINDEX

LINDEX 返回列表 key 里索引 index 位置存储的元素。 index 下标是从 0 开始索引的,所以 ``0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素,在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。当index 超出索引范围时返回 nil

基本语法:

LINDEX key index

示例:

redis> LPUSH mylist "World"
(integer) 1
redis> LPUSH mylist "Hello"
(integer) 2
redis> LINDEX mylist 0
"Hello"
redis> LINDEX mylist -1
"World"
redis> LINDEX mylist 3
(nil)

2.6 LREM

LREM 用于从列表 key 中删除前 count 个值等于 element 的元素,返回值为删除元素个数。这个 count 参数通过下面几种方式影响这个操作:

  • count > 0: 从头到尾删除值为 value 的元素。
  • count < 0:从尾到头删除值为 value 的元素。
  • count = 0:移除所有值为 value 的元素。

例如, LREM list -2 “hello” 会从列表中删除最后两个出现的 “hello”

基本语法:

LREM key count element

示例:

redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "hello"
(integer) 2
redis> RPUSH mylist "foo"
(integer) 3
redis> RPUSH mylist "hello"
(integer) 4
redis> LREM mylist -2 "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "foo"

2.7 LLEN

LLEN 用于返回存储在 key 中的列表长度。 如果 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。

基本语法:

LLEN key

示例:

redis> LPUSH mylist "World"
(integer) 1
redis> LPUSH mylist "Hello"
(integer) 2
redis> LPUSH mylist "Redis.com.cns"
(integer) 3
redis> LLEN mylist
(integer) 3

2.8 LPOP

LPOP 命令用于删除并返回存储在 key 中的列表的第一个元素。返回值为列表的首元素,key 不存在的时候返回 nil

基本语法:

LPOP key

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LPOP mylist
"one"
redis> LRANGE mylist 0 -1
1) "two"
2) "three"

2.9 RPOP

RPOP 用于移除并返回列表 key 的最后一个元素。返回值为最后一个元素的值,key 不存在时返回 nil

基本语法:

RPOP key

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> RPOP mylist
"three"
redis> LRANGE mylist 0 -1
1) "one"
2) "two"

2.10 LSET

LSET 用于设置列表 keyindex 位置的元素值,当 index 超出列表索引范围时会返回错误 ERR ERR index out of range

基本语法:

LSET key index element

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LSET mylist 0 "four"
"OK"
redis> LSET mylist -2 "five"
"OK"
redis> LRANGE mylist 0 -1
1) "four"
2) "five"
3) "three"

3. 应用场景

Redis List 提供了高效的列表结构操作,可以方便地进行数据的插入、删除和访问。

主要优点如下:

  • 快速的元素插入和删除:可以在列表的头部或尾部进行操作,时间复杂度为 O(1)
  • 可以作为队列或栈使用:支持 LPUSHLPOP 操作创建栈,支持 RPUSHBRPOP 操作创建队列。
  • 提供了块操作:可以一次性获取或删除多个元素,减少了网络往返时间。
  • 可以作为数据缓存:因为 Redis 是内存中的数据结构,可以作为高速缓存使用。

应用场景:

  • 数据缓存:通过推入或者弹出元素进行列表操作,并且可以实现分页查询。
  • 消息队列:生产者将消息推入列表,消费者从列表中拉取消息。
  • 简单排行榜:通过使用 SORT 命令可以根据分数来排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【例子】webpack 开发一个可以加载 markdown 文件的加载器 loader 案例

Loader 作为 Webpack 的核心机制&#xff0c;内部的工作原理却非常简单。接下来我们一起来开发一个自己的 Loader&#xff0c;通过这个开发过程再来深入了解 Loader 的工作原理。 这里我的需求是开发一个可以加载 markdown 文件的加载器&#xff0c;以便可以在代码中直接导入 m…

软考系统架构师系统工程与信息系统基础考点

软考系统架构师系统工程与信息系统基础考点 系统工程 定义&#xff1a;一种组织管理技术&#xff0c;一种现代的科学决策方法 目的&#xff1a;以最好的方式实现系统 目标&#xff1a;整体最优 意义&#xff1a;利用计算机为工具&#xff0c;对系统的结构、元素、信息和反馈…

网络流-EK算法(保姆级教学)

本文引用董晓算法的部分图片。 一些不能带入纸质资料的竞赛&#xff0c;网络流纳入考纲。 因为需要默写&#xff0c;想来也不会考默写dinic这种算法难倒大家&#xff0c;只需要快速敲对EK算法就行了。 EK算法能在O(n*m^2)的复杂度内解决最大流问题&#xff0c;其中最大流就是…

wpf 附加属性 RegisterAttached 内容属性

// // 摘要: // 选中时展示的元素 public static readonly DependencyProperty CheckedElementProperty DependencyProperty.RegisterAttached("CheckedElement", typeof(object), typeof(StatusSwitchElement), new PropertyMetadata((object)null…

java加载文件初始化数据

对于一些数据量不大的配置类数据&#xff0c;放到数据库中占用数据库资源&#xff0c;可以放到代码中维护。比如 &#xff08;1&#xff09;字段少业务单一&#xff1a;做成枚举&#xff1b; &#xff08;2&#xff09;字段多业务复杂&#xff1a;则可以放到文件中维护&#…

【Linux小命令】一文讲清ldd命令及使用场景

一文讲清ldd命令及使用场景 前言下面进入正题&#xff1a;ldd命令 前言 博主今天ubuntu编译go项目出来的一个可执行文件&#xff0c;放centos运行发现居然依赖于XXlib库。然后我一下就想到两个系统库版本不一致&#xff0c;重编。换系统&#xff0c;导项目&#xff0c;配环境……

从新手到高手:彻底掌握MySQL表死锁

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 从新手到高手&#xff1a;彻底掌握MySQL表死锁 前言什么是死锁mysql死锁的原因1. 互斥资源的竞争…

备份操作系统

在VMware中备份方式&#xff1a;快照和克隆 1.快照&#xff1a;短期备份&#xff0c;频繁备份 快照&#xff1a;又称还原点&#xff0c;就是保存在拍照时&#xff0c;系统状态。在后期的时候可以恢复 2.克隆&#xff1a;长期备份 克隆&#xff1a;就是复制的意思&#xff0…

maven仓库的作用以及安装 , DEA配置本地Maven

ay12-maven 主要内容 Maven的作用Maven仓库的作用Maven的坐标概念Maven的安装IDEA配置本地Maven 一、maven概述 1.1、项目开发中的问题 1、我的项目依赖一些jar包&#xff0c;我把他们放在哪里&#xff1f;直接拷贝到项目的lib文件夹中?如果我开发的第二个项目还是需要上面…

网管工作实践_02_IP/MAC地址管理工具

1、ipconfig命令格式及参数 ipconfig是内置于Windows的TCP/IP应用程序&#xff0c;用于显示本地计算机网络适配器的MAC地址和IP地址等配置信息&#xff0c;这些信息一般用来榆验手动配置的TCP/IP设置是否正确。当在网络中使用 DHCP服务时&#xff0c;IPConfig可以检测计算机中分…

006 动态数组(lua)

文章目录 初步准备实际应用 在Lua中&#xff0c;没有类的概念&#xff0c;因为它是基于原型的语言。不过&#xff0c;我们可以使用表&#xff08;table&#xff09;来模拟类和对象 Lua中的数组索引是从1开始的&#xff0c;而不是从0开始&#xff0c; Lua的表是动态大小的&#…

DigitalOcean 推出 Opensearch 托管服务,易用且强大的日志洞察与分析工具

DigitalOcean 宣布推出 DigitalOcean 的 Opensearch托管服务&#xff0c;这是一款专为深入的日志分析、简化故障排查和优化应用性能而设计的全面的解决方案。 简单介绍一下 Opensearch 这里先给不了解 Opensearch 的用户简单介绍一下。OpenSearch 是从 Elasticsearch 的一个相…

提升网络速度的几种有效方法

在数字化时代&#xff0c;网络速度对于我们的日常生活和工作至关重要。无论是观看高清视频、在线游戏&#xff0c;还是进行视频会议&#xff0c;快速稳定的网络连接都是不可或缺的。如果你发现自己当前的网络速度不尽如人意&#xff0c;那么不妨尝试以下几种方法来提升它。 升…

6.26.8 基于多视角深度卷积神经网络的高分辨率乳腺癌筛查

1. 介绍 1.1 乳腺癌筛查 开发了一种新的DCN&#xff0c;它能够处理乳房x线摄影筛查的多个视图&#xff0c;并利用大分辨率图像而不缩小。将这种DCN称为多视图深度卷积网络(MV-DCN)。网络学习预测放射科医生的评估&#xff0c;将传入的样本分类为BI-RADS 0(“不完整”)&#xf…

网络问题排障专题-AF网络问题排障

目录 一、数据交换基本原理 1、ARP协议工作原理 数据包如图&#xff1a; 2、二层交换工作原理 简述核心概念&#xff1a; 二层交换原理-VLAN标签 3、三层交换工作原理 二、AF各种部署模式数据转发流程 1、路由模式数据转发流程 三、分层/分组逐一案例讲解 1、问题现…

对于 PHP 开发的 Web 应用,怎样有效地防止 SQL 注入攻击?

防止 SQL 注入攻击是在 PHP 开发的 Web 应用中非常重要的安全措施之一。下面是一些有效的防止 SQL 注入攻击的方法&#xff1a; 使用参数化查询和预处理语句&#xff1a;使用参数化查询能够将用户输入的数据与 SQL 查询分离&#xff0c;从而避免 SQL 注入攻击。使用预处理语句可…

免费分享一套SpringBoot+Vue在线水果(销售)商城管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue在线水果(销售)商城管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue在线水果(销售)商城管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue在线水果(销售)商…

Android高级面试_8_热修补插件化等

Android 高级面试&#xff1a;插件化和热修复相关 1、dex 和 class 文件结构 class 是 JVM 可以执行的文件类型&#xff0c;由 javac 编译生成&#xff1b;dex 是 DVM 执行的文件类型&#xff0c;由 dx 编译生成。 class 文件结构的特点&#xff1a; 是一种 8 位二进制字节…

探索Facebook的未来世界:数字社交的演进之路

在数字化和全球化的浪潮中&#xff0c;社交网络如Facebook已经成为了人们日常生活不可或缺的一部分。然而&#xff0c;随着技术的迅猛发展和用户需求的不断变化&#xff0c;Facebook正在经历着社交平台的演进之路。本文将探索Facebook的未来世界&#xff0c;分析数字社交的发展…

CP AUTOSAR标准之KeyManager(AUTOSAR_CP_SWS_KeyManager)(更新中……)

1 简介和功能概述 该规范描述了AUTOSAR基础软件模块< KeyManager >的功能、API和配置。   AUTOSAR KeyM模块由两个子模块组成,即加密密钥子模块和证书子模块,如[1]“AUTOSAR对加密堆栈的要求”所要求。   加密密钥子模块提供API和配置项来引入或更新预定义的加密密…