Redis-带你深入学习数据类型list

目录

1、list列表

2、list相关命令

2.1、添加相关命令:rpush、lpush、linsert

2.2、查找相关命令:lrange、lindex、llen

2.3、删除相关命令:lpop、rpop、lrem、ltrim

2.4、修改相关命令:lset

2.5、阻塞相关命令:blpop、brpop

3、应用场景

3.1、消息队列

 3.2、最新列表


1、list列表

        redis中list并非是一个简单的数组,而更像是一个双端队列,具体的结合下面的命令你会更加容易理解~

 list的特点:

  • list中元素是有序的----存放有序
  • 列表中元素可以重复
  • 列表头部尾部都可以进行插入或删除元素

2、list相关命令

下述所有命令涉及到的头部都可理解为列表左侧,列表末尾都可理解为列表右侧 

2.1、添加相关命令:rpush、lpush、linsert

rpush:

  • rpush:在列表尾部添加元素;若key不存在则新增key,然后再添加相应元素;若存在则在末尾追加
  • 语法:rpush key value [value...]
  • 返回值:添加后的元素数量
  • 时间复杂度O(1)---O(k)

举例:

lpush:

举例:

查看是否正确:

  • lpush:在列表头部添加元素;若key不存在则新增key,然后再添加相应元素;若存在则在头部添加
  • 语法:lpush key value [value...]
  • 返回值:添加后的元素数量
  • 时间复杂度O(1)---O(k)

linsert:

  •  linsert:在特定元素前或后添加元素
  • 语法:linsert key before | after pivot value
  • 返回值:添加后元素个数
  • 时间复杂度O(n)--n为头部到pivot的距离

举例:

2.2、查找相关命令:lrange、lindex、llen

lrange:

  •  lrange:在特点元素前或后添加元素
  • 语法:lrange key start stop
  • 返回值:返回指定区间的元素
  • 时间复杂度O(n)--n为头部到start的距离加上stop的范围

举例:

注:

  • 下标可为负数 
  • 若下标不合法,则会尽可能的返回可以获取到的值

lindex:

  • lindex:给定下标,获取相应元素
  • 语法:lindex key index
  • 返回值:相应的值;无则返回nil
  • 时间复杂度O(n)---n值索引的偏移量

举例:

llen:

  • llen:获取列表的长度
  • 语法:llen key
  • 返回值:列表的长度
  • 时间复杂度(1)

举例:

2.3、删除相关命令:lpop、rpop、lrem、ltrim

lpop:

  • lpop:删除列表头部的第一个元素
  • 语法:lpop key
  • 返回值:删除的元素的值
  • 时间复杂度(1)

举例:

rpop:

  • rpop:删除列表的末尾的第一个元素
  • 语法:rpop key
  • 返回值:被删除的元素的值
  • 时间复杂度(1)

举例:

注:lpop和rpop在redis6之后就增加参数了,可以指定删除前几个或后几个,例rpop key count 

lrem:

  • lrem:删除指定的元素,且可指定具体删除几个
  • 语法:lrem key count value
  • 返回值:被删的元素的个数
  • 时间复杂度(k)----k为元素数
  • 补充:count大于0时从头部开始往后删,小于0时从末尾往前删,等于0时删除全部

举例:

ltrim:

  • ltrim:保留指定区间的值,其余的全删除
  • 语法:ltrim key start stop
  • 返回值:命令执行成功返回ok
  • 时间复杂度(k)---k元素个数
  • 补充:start 和 stop是闭区间

举例:

2.4、修改相关命令:lset

  • lset:根据指定下标修改元素值
  • 语法:lset key index value
  • 返回值:执行成功返回ok;下标越界会弹出相应提示,如下举例
  • 时间复杂度O(n)

举例:

2.5、阻塞相关命令:blpop、brpop

blpop:

  • blpop:lpop的阻塞版本
  • 语法:blpop key [key...] timeout
  • 返回值:返回值有两个以列表形式,第一个是删除的是那个key的首部元素,第二个是删除的元素的值~
  • 时间复杂度O(1)
  • 补充:timeout为该阻塞最长为多长时间,单位:s;在改命令阻塞时,redis依然可以处理其他命令

举例:

上述由于key中有值,所以无需等待,立即可删除

上述由于超出时间后,依然没有值可进行删除

操作一:

操作二:

 

上述在阻塞期间,有值可删时立即删除,命令执行完成~ 

brpop:

  • brpop:rpop的阻塞版本
  • 语法:brpop key [key...] timeout
  • 返回值:返回值有两个以列表形式,第一个是删除的是那个key的首部元素,第二个是删除的元素的值~
  • 时间复杂度O(1)
  • 补充:同上命令blpop 


3、应用场景

3.1、消息队列

        如下图所示,Redis的lpush + brpop命令组合即可实现阻塞队列,生产者客户端使用lpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的争抢列表尾部的元素,多个客户端保证了消费的负载均衡和高可用;

 3.2、最新列表

        list类型的lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表,如朋友圈的点赞列表、评论列表。

        但是,并不是所有的最新列表都能用list类型实现,因为对于频繁更新的列表,list类型的分页可能导致列表元素重复或漏掉,举个例子,当前列表里由表头到表尾依次有(E,D,C,B,A)五个元素,每页获取3个元素,用户第一次获取到(E,D,C)三个元素,然后表头新增了一个元素F,列表变成了(F,E,D,C,B,A),此时用户取第二页拿到(C,B,A),元素C重复了。只有不需要分页(比如每次都只取列表的前5个元素)或者更新频率低(比如每天凌晨更新一次)的列表才适合用list类型实现。对于需要分页并且会频繁更新的列表,需用使用有序集合sorted set类型实现。另外,需要通过时间范围查找的最新列表,list类型也实现不了,也需要通过有序集合sorted set类型实现,如以成交时间范围作为条件来查询的订单列表。之后在介绍有序集合sorted set类型的应用场景时会详细介绍sorted set类型如何实现最新列表。

好啦,本期到这里了,下期见~

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

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

相关文章

在线实时监测离子风机的功能

离子风机是一种能够通过释放大量负离子来净化空气并提供清新环境的设备。要实现联网实时在线监测离子风机,可以考虑以下几个步骤: 1. 设备接入互联网:离子风机需要具备网络连接功能,可以通过无线网络或者以太网接入路由器&#x…

SSM - Springboot - MyBatis-Plus 全栈体系(五)

第二章 SpringFramework 四、SpringIoC 实践和应用 2. 基于 XML 配置方式组件管理 2.5 实验五:高级特性:FactoryBean 特性和使用 2.5.1 FactoryBean 简介 FactoryBean 接口是Spring IoC容器实例化逻辑的可插拔性点。 用于配置复杂的Bean对象&#x…

企业数字化神经网络

随着数字化时代的到来,数据已经成为企业战略性资源和重要的生产要素。企业数字化转型的核心是充分开发和利用数据资源,以数据为驱动,对业务流程进行重构与创新,从而提升企业的核心竞争力。业务系统是企业数据资源的源头&#xff0…

RabbitMQ 知识点解读

1、AMQP 协议 1.1、AMQP 生产者的流转过程 当客户端与Broker 建立连接的时候,会调用factory .newConnection 方法,这个方法会进一步封装成Protocol Header 0-9-1 的报文头发送给Broker ,以此通知Broker 本次交互采用的是AMQPO-9-1 协议&…

蚂蚁链发布全新Web3品牌ZAN,涉及RWA、合规等服务

9月8日,在外滩大会见解论坛「从科幻到科技:Web3、元宇宙、AIGC」现场上,蚂蚁集团旗下的蚂蚁链联合Everest Ventures Group、HASHKEY、Morpheus labs发布全新Web3品牌ZAN。原蚂蚁链CTO张辉担任ZAN CEO。 该品牌致力于服务Web3机构客户与Web3应…

靶场溯源第二题

关卡描述:1. 网站后台登陆地址是多少?(相对路径) 首先这种确定的网站访问的都是http或者https协议,搜索http看看。关于http的就这两个信息,然后172.16.60.199出现最多,先过滤这个ip看看 这个很…

leetcode 43.字符串相乘

⭐️ 题目描述 🌟 leetcode链接:字符串相乘 思路: 代码: class Solution { public:string multiply(string num1, string num2) {if (num1 "0" || num2 "0") {return "0";}/*0 1 2 下标1 2…

【JavaScript手撕代码】new

目录 手写 手写 /* * param {Function} fn 构造函数 * return {*} **/ function myNew(fn, ...args){if(typeof fn ! function){return new TypeError(fn must be a function)}// 先创建一个对象let obj Object.create(fn.prototype)// 通过apply让this指向obj, 并调用执行构…

Spring事务管理: 构建稳健的数据库事务处理

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

爬虫逆向实战(29)-某蜂窝详情页(cookie、混淆、MD5、SHA)

一、数据接口分析 主页地址:某蜂窝 1、抓包 通过抓包可以发现数据是静态的,在html中。 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无响应是否加密? 无cookie是否加密? 通过查看“c…

如何预防最新的Mallox变种malloxx勒索病毒感染您的计算机?

导言: 在数字时代, .malloxx 勒索病毒的威胁一直悬在我们头上,如何应对这种威胁,以及在数据被勒索后如何恢复它们,都是备受关注的话题。本文91数据恢复将向您介绍 .malloxx 勒索病毒的独特工作方式,提供与众…

stm32同芯片但不同flash工程更换Device出现报错

目录 1. 问题描述2. 解决方案 1. 问题描述 stm32同芯片但不同flash工程更换Device出现报错 2. 解决方案 更换Device,我是从ZE换为C8: 把这个从HD更换为MD 解决!

解析Spring Boot中的Profile:配置文件与代码的双重掌控

目录 创建一个spring boot 项目spring boot 中的配置体系配置文件与 Profile代码控制与Profile 创建一个spring boot 项目 基于 Spring Boot 创建 Web 应用程序的方法有很多,我们选择在idea中直接进行创建,服务器URL选择Spring Initializer 网站,类型选…

Android Studio开发入门教程:如何更改APP的图标?

更改APP的图标(安卓系统) 环境:Windows10、Android Studio版本如下图、雷电模拟器。 推荐图标库 默认APP图标 将新图标拉进src/main/res/mipmap-hdpi文件夹(一般app的icon图标是存放在mipmap打头的文件夹下的) 更改sr…

flutter Could not get unknown property ‘ndkVersion’

使用的 flutter 版本为 3.7.2 ,编译运行 如下 Could not get unknown property ‘ndkVersion’ for object of type com.android.build.gradle.internal.dsl.BaseAppModuleExtension 解决方法是 在flutter-3.7.2\packages\flutter_tools\gradle\flutter.gradle配置…

Spring Boot深度解析:快速开发的秘密

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

C语言——指针进阶(2)

继续上次的指针,想起来还有指针的内容还没有更新完,今天来补上之前的内容,上次我们讲了函数指针,并且使用它来实现一些功能,今天我们就讲一讲函数指针数组等内容,废话不多说,我们开始今天的学习…

页面分布引导新手指引(driver.js)

页面分布引导(driver.js) 最近由于有一个需求——做新手指引,在新用户进入页面的时候提供指引和帮助,快速让用户熟悉页面的功能,但是为了不要过多影响现有的页面逻辑和样式,找到一款非常好用的工具driver.js:Driver.js是一个功能强大且高度可…

成都瀚网科技有限公司:抖音商家怎么免费入驻?

随着抖音成为全球最受欢迎的短视频平台之一,越来越多的商家开始关注抖音上的商机。抖音商家的进驻可以帮助商家扩大品牌影响力和销售渠道。那么,如何免费进入抖音成为商家呢?下面就为大家介绍一下具体步骤。 1、抖音商家如何免费注册&#xf…

Mojo安装使用初体验

一个声称比python块68000倍的语言 蹭个热度,安装试试 系统配置要求: 不支持Windows系统 配置要求: 系统:Ubuntu 20.04/22.04 LTSCPU:x86-64 CPU (with SSE4.2 or newer)内存:8 GiB memoryPython 3.8 - 3.10g or cla…