【Redis实战专题】「技术提升系列」夯实基础分析探究List列表的点点滴滴

本文主要是介绍【Redis实战专题】「技术提升系列」夯实基础分析探究List列表的点点滴滴,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

夯实基础分析探究List列表的点点滴滴

    • List列表介绍
    • 队列和堆栈场景
    • 常用操作指令
      • llen获取链表的长度
        • llen指令的案例介绍
          • 添加购物车信息
          • 获取用户数购物车数量
      • lindex获取指定位置的元素
        • lindex指令的案例介绍
          • 获取第三个位置的购物车数据
      • lrange获取链表子元素列表
        • 下标的选择
        • lrange指令的案例介绍
      • lset修改指定位置元素
        • lset指令的案例介绍
      • linsert对链表的某个值之前/之后插入
        • 指令说明
        • linsert指令的案例介绍
      • lrem删除指定值的数据
        • lrem指令的案例介绍
      • ltrim截取指定值的数据
        • 指令介绍
        • ltrim指令的案例介绍
    • 总结介绍

List列表介绍

Redis的列表(List),其存储结构采用的是双向链表,而非数组形式。这种结构在随机定位方面性能欠佳,但在首尾插入和删除数据方面表现出色。当数据量较大时,需要特别关注链表操作的时间消耗。
在这里插入图片描述

队列和堆栈场景

在Redis中,处理列表(List)数据结构时,RPUSHRPOPLPUSHLPOP这四个命令尤为关键。它们不仅允许用户从列表的右侧或左侧添加和删除元素,还赋予了用户对列表内容进行精细操控的能力。在这里插入图片描述

  • RPUSH: 用于在列表的右端(尾部)添加一个或多个元素。当你希望将新的数据添加到列表的末尾时,可以使用RPUSH

    • 例如,RPUSH mylist element1 element2 会将element1element2添加到mylist的末尾。
  • RPOP: 与RPUSH相反,RPOP命令用于移除并返回列表的右端(尾部)元素。当你想从列表的末尾取出一个元素并处理它时,可以使用RPOP

    • 例如,RPOP mylist会移除mylist的最后一个元素并返回它。
  • LPUSH: 类似于RPUSH,但LPUSH是在列表的左端(头部)添加元素。当你想将新数据插入到列表的开始位置时,LPUSH是个不错的选择。

    • 例如,LPUSH mylist element1 element2会将element1element2添加到mylist的开头。
  • LPOP: 与LPUSH相反,LPOP命令用于移除并返回列表的左端(头部)元素。当你需要从列表的开始位置取出一个元素并处理它时,可以使用LPOP

    • 例如,LPOP mylist会移除mylist的第一个元素并返回它。

这四个命令的结合使用,可以构建出许多有用的数据结构操作和数据处理逻辑,如栈(Stack)、队列(Queue)等。

常用操作指令

列表正是采用了双向链表的存储方式。在对其进行操作时,我们需要了解一些关键的概念和操作方法,如下图所示。
在这里插入图片描述
接下来我将深入探讨获取链表长度、获取指定位置元素、获取链表子元素、修改指定位置元素、插入元素、删除元素以及定长列表等方面的内容。

注意,介绍说明的内容不代表所有的指令操作,而是作者最喜欢以及常用的指令

llen获取链表的长度

使用llen命令来获取链表的长度。该命令的时间复杂度为 O(1),可以快速获取链表的长度信息

llen key
llen指令的案例介绍

如果,使用Redis来存储用户的购物车数据。每个用户都有一个对应的购物车列表,以用户 ID作为键。

添加购物车信息

当用户将商品添加到购物车时,我们使用RPUSH命令将商品信息添加到对应的购物车列表中。
在这里插入图片描述

获取用户数购物车数量

现在,我们想要知道【用户ID-1】的购物车中有多少件商品,就可以执行llen 用户ID-1命令。这样,我们就能准确地获取用户购物车的商品数量,以便进行后续的处理和展示。
在这里插入图片描述

lindex获取指定位置的元素

使用lindex命令获取列表中指定位置的元素。该命令的时间复杂度为 O(n),其中 n 为列表的长度

lindex key index
lindex指令的案例介绍

如果,使用Redis存储用户的订单列表。当需要查询某个用户特定订单在列表中的详细信息时,就可以使用lindex指令。

获取第三个位置的购物车数据

比如,【用户ID-1】有一个购物车列表,要获取该列表中第 3个位置的订单详细信息。
在这里插入图片描述
通过执行lindex 用户ID-1 3,就能获取到指定位置的购物车数据,进而可以对其进行进一步的处理和展示,如查看购物车的商品、价格等具体内容。

lrange获取链表子元素列表

LRANGE 命令用于获取列表中指定区间内的元素。这里的 key 是你想要查询的列表的键名。而 start end 是指定区间的参数,其中 start 是起始位置,end 是结束位置。

lrange key start end

通过指定列表的键(key)以及开始和结束的索引,用户可以轻松地获取一个包含所需子元素的列表。

下标的选择

lrange命令允许用户从Redis的list数据结构中检索一个指定范围的元素。索引是基于0的,其中-1表示列表的最后一个元素,-2表示倒数第二个元素。
在这里插入图片描述

  • 0 表示列表的第一个元素(因为 Redis 的列表索引是从 0 开始的)。
  • -2 表示列表的倒数第二个元素(负数索引在 Redis 中用于从列表尾部开始计数,-1 是最后一个元素,-2 是倒数第二个元素,依此类推)。
lrange指令的案例介绍

例如,如果你有一个名为【用户ID-1】的list,并希望获取从索引0(包含)到索引4(包含)的所有元素,你可以使用以下命令:

lrange 用户ID-1 0 3

Redis将返回一个包含指定索引范围内所有元素的列表。如果请求的索引超出了列表的实际范围,那么lrange将只返回实际存在的元素。
在这里插入图片描述

lrange key 0 -2 的意思是从列表 key 的第一个元素开始,到倒数第二个元素结束,返回这个区间内的所有元素。
在这里插入图片描述

lset修改指定位置元素

使用 lset 命令,它允许你直接通过索引来修改list列表中某个位置的值。

lset key index newValue

其中 key 是list的键名,index 是你想要修改的元素的索引,newValue 是你想要设置的新值。

lset指令的案例介绍

首先,我们初始化一个键(key)为aqueue的列表,这个列表用于存储一系列的元素。接下来,我们向这个列表中添加了两个整数元素,分别是1和2。在这里插入图片描述
这两个元素按照添加的顺序存储在列表中,形成了列表的初始内容。
在这里插入图片描述
使用 lset 命令来根据索引直接修改list中某个元素的值。通过指定list的键名、索引位置和新值。

lset aqueue 1 b

在这里插入图片描述
可以看出来对应的第一个index坐标的值改为了b,如下图所示。
在这里插入图片描述

linsert对链表的某个值之前/之后插入

linsert 命令通过引入 beforeafter 机制,提供了一种基于已存在元素值来插入新元素的灵活方式

指令说明

linsert 命令接收四个参数:列表的键名、位置指示(BEFOREAFTER)、参考元素值以及要插入的新元素值。

linsert  key before  元素值插入的对象值

linsert 命令能够在不改变列表中其他元素位置的情况下,将新元素精准地插入到指定位置。

linsert指令的案例介绍

当我们考虑Redis中的aqueue队列时,为了增强其功能或满足特定需求,我们可以选择在队列中已有的a元素之前插入一个新的元素w在这里插入图片描述
当我们考虑Redis中的aqueue队列时,为了增强其功能或满足特定需求,我们可以选择在队列中已有的w元素之后插入一个新的元素x
在这里插入图片描述

lrem删除指定值的数据

当需要移除列表中与特定值的所有元素时,我们可以利用Redis的LREM命令,并将count参数设置为0,从而实现对列表的精确控制和管理。

在Redis中,我们可以根据给定的参数valuecount的值来移除列表中与value相等的元素。

LREM key count value

LREM命令接受三个参数:列表的键名、要移除的元素的数量(count)以及要移除的元素的值(value)。当count为0时,LREM命令将移除列表中所有与指定值相等的元素。

lrem指令的案例介绍

在处理aqueue队列时,我们采用LREM命令来移除所有值为w的元素,其中参数0表示执行全局搜索并删除所有匹配的元素。
在这里插入图片描述

ltrim截取指定值的数据

ltrim为了优化列表的内容,我们可以对列表进行裁剪,仅保留指定区间内的元素,以精简和聚焦列表的内容。

指令介绍

LTRIM 是 Redis 中的一个命令,用于对列表(List)进行修剪,即移除列表中指定范围之外的元素,只保留指定范围内的元素。

ltrim key start stop

这里的 key 是你想要操作的列表的键名,而 startstop 则是你想要保留的元素的索引范围。

ltrim指令的案例介绍

ltrim 命令会移除列表中所有不在 [0, 1] 范围内的元素,只保留范围内的元素。
在这里插入图片描述
这个命令对于限制列表的大小或者只保留列表中的一部分元素非常有用。

总结介绍

Redis提供了丰富的列表(List)数据结构操作指令,这些指令允许用户灵活地管理存储在Redis中的列表数据。

这些指令为Redis列表数据结构提供了强大的操作能力,使用户能够轻松地实现队列、堆栈等数据结构,并灵活地管理列表数据。

这篇关于【Redis实战专题】「技术提升系列」夯实基础分析探究List列表的点点滴滴的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081021

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言