Redis——list类型详解
概要
Redis中的list类型相当于双端队列,支持头插,头删,尾插,尾删,并且列表中的内容是可以重复的。
如果搭配使用rpush和lpop,那么就相当于队列
如果搭配使用rpush和rpop,那么就相当于栈
lpush
向列表中头插一个或多个元素,返回list的长度。如果key已经存在,并且对应的value不是list类型,则报错
当插入多个元素时,是一次头插,例如插入1,2,3,4,那么列表中是4,3,2,1
演示:
lrange
查看list指定区间内的元素,前闭后闭,支持负数(-1就相当于倒数第一个元素),下标从0开始,因此查看全部元素就是0,-1
演示:
展示的元素前面的序号并不是下标,而是结果集专用的序号
需要注意的是,如果我们给的下标超出了list的范围,如果是其他语言,可能就会报错或者抛出异常。但是在Redis中会尽可能的获取对应的内容,这体现了Redis的鲁棒性
lpushx
从左侧插入,当key不存在,用法和lpush一致,当key存在,则插入失败,返回0
演示:
Rpush
向列表中尾插一个或多个元素,返回list的长度。如果key已经存在,并且对应的value不是list类型,则报错
演示:
rpushx
从右侧插入,当key不存在,用法和lpush一致,当key存在,则插入失败,返回0
演示:
lpop
头删list中的元素,返回取出的元素的值。当列表为空则返回nil
演示:
rpop
尾删list中的元素,返回取出的元素的值。当列表为空则返回nil
演示:
lindex
获取到指定位置的元素,时间复杂度为O(N),如果下标非法则返回nil
演示:
linsert
在list的指定处插入元素,如果是before就插入在基准值前面,如果是after就插入到基准值后面,基准值是在list中存在的值而非下标,时间复杂度是O(N)
演示:
如果存在多个相同的基准值,那么只插入到第一个基准值处
llen
获取列表的长度,如果key不存在则返回0
lrem
删除指定的值,count为要删除的个数
count的值 | 作用 |
---|---|
count > 0 | 从头到尾,删除count个指定的元素 |
count < 0 | 删除所有指定的元素 |
count = 0 | 从尾到头,删除count个指定的元素 |
演示:
ltrim
保留列表中start和stop之间的元素,删除两边的元素
演示:
lset
根据指定的下标,修改元素,如果下标越界,则报错
演示:
blpop/brpop
类似于阻塞队列,如果队列为空,尝试出队列,阻塞队列根据阻塞时间产生阻塞,期间Redis可以执行其他命令,直到队列不空,返回元素(如果超时了就返回nil)
命令中可以设置多个key,从左到右遍历key,哪个key的list中不空,则返回元素
演示:
队列不为空:
队列为空时:
先设置过期时间是100s
这边的客户端就阻塞了,启动另一个服务器,往队列里插入元素
这个服务器插入完元素,上一个服务器就返回元素了
内部编码
编码方式 | 细节 |
---|---|
ziplist 压缩列表 | 列表元素个数小于512个同时每个元素的长度小于64字节 |
linkedlist 俩表 | 不满足上述条件 |
上述编码方式是老版本的Redis使用的,新版本的Redis使用了quicklist,相当于链表和压缩列表的结合,整体是一个链表,每个链表的节点是一个压缩链表
应用场景
作为数组存储多个元素
例如sql中有下面这两张表
那么在Redis中可以通过以下关联关系进行组织数据
作为消息队列
这三个消费者谁先执行brpop命令,谁就可以先拿到新来的元素
相关文章:
Redis——list类型详解
概要 Redis中的list类型相当于双端队列,支持头插,头删,尾插,尾删,并且列表中的内容是可以重复的。 如果搭配使用rpush和lpop,那么就相当于队列 如果搭配使用rpush和rpop,那么就相当于栈 lpu…...
npm 安装 git 仓库包
安装 #v1.0.0 代表版本, 例如打了仓库一个tag叫v1.0.0; 如果不指定版本则默认是最新的代码 npm install githttp://mygitlab.xxxx.net/chengchongzhen/hex-event-track.git#v1.0.0在项目根目录执行以下命令, 此时你的代码会被链接到npm的全局仓库, 类似执行了 npm install xxx …...
问题来了!你知道你穿的防砸劳保鞋的保护包头都是什么材料
防砸劳保鞋是较为常见的一种劳保鞋,用于作业过程中保护工人的脚,减少或避免被坠落物、重物砸伤或压伤脚部的工作鞋。防砸安全鞋鞋前头装有防护包头,具有耐压力和抗冲击性能。主要适用于矿山、机械、建筑、钢铁、冶金、运输等行业。 你穿的防砸…...
计算机网络-物理层(三)编码与调制
计算机网络-物理层(三)编码与调制 在计算机网络中,计算机需要处理和传输用户的文字、图片、音频和视频,它们可以统称为消息 数据是运输信息的实体,计算机只能处理二进制数据,也就是比特0和比特1。计算机中…...
Linux面试笔试题(6)
91、6块300G的硬盘做raid5,新的设备容量是多大(C) A 900G B 1800G C 1500G D 300G 6300G−300G 1500G 由于一块硬盘用于奇偶校验,所以设备容量将是1500G. Raid 5是一种磁盘阵列,将数据分散到多个硬盘上以提高性能和可…...
qt中窗口的布局
qt中窗口的布局 常用的窗口布局方式使用拖拽控件的方式调用窗口布局使用Widget控件完成窗口布局布局中嵌套布局demo(制作登录页面) 如果不使用窗口布局,会带来的后果: 控件可能显示不出来不能按照期望的大小显示不能跟随窗口进行…...
玄子Share - HTML Emmet 语法详细介绍
玄子Share - HTML Emmet 语法详细介绍 以下Emmet语法 基于WebStorm 2023.2演示 Emmet 语法介绍 Emmet 是一种缩写语法,旨在简化 HTML 和 CSS 的编写。它基于 CSS 选择器的语法结构,通过输入特定的缩写,可以快速生成 HTML 结构。 Emmet 语法…...
Linux上安装和使用git到gitoschina和github上_亲测
Linux上安装和使用git到gitoschina和github上_亲测 git介绍与在linux上安装创建SSHkey在git-oschina使用maven-oschina使用在github使用maven-github使用组织与仓库 【git介绍与在linux上安装】 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何…...
合宙Air724UG LuatOS-Air LVGL API--简介
为何是 LVGL LVGL 是一个开源的图形库,它提供了创建嵌入式 GUI 所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用的特点。 LVGL特点: 强大的 控件 :按钮、图表、列表、滑动条、图像等 高级图形引擎:动…...
「Vue|网页开发|前端开发」01 快速入门:用vue-cli快速写一个Vue的HelloWorld项目
本文主要介绍如何用vue开发的标准化工具vue-cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程。 文章目录 一、准备工作:安装node.js二、项目搭建创建项目目录全局安装vue-cli使用Webpack初始化项目启动项目学会…...
7.5.tensorRT高级(2)-RAII接口模式下的生产者消费者多batch实现
目录 前言1. RAII接口模式封装生产者消费者2. 问答环节总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-RAI…...
华为OD-最大括号深度
题目描述 一个合法的括号匹配序列有以下定义: 1、空串""是一个合法的括号匹配序列 2、如果"X"和"Y"都是合法的括号匹配序列,"XY"也是一个合法的括号匹配序列 3、如果"X"是一个合法的括号匹配序列,那么"(X)"也是一…...
【Leetcode】108. 将有序数组转换为二叉搜索树
一、题目 1、题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-1…...
【树莓派打怪升级】:玩转个人Web世界!
文章目录 概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS设置 Apache Web 服务器测试 web 站点安装静态样例站点 将web站点发布到公网安装 Cpolarcpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存到cpolar配置文件中测试修改后配置文件配置cpola…...
mysql5.7在centos环境下的常见故障
1. GPG Keys升级导致安装失败 错误信息: The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this reposi…...
hive中get_json_object函数不支持解析json中文key
问题 今天在 Hive 中 get_json_object 函数解析 json 串的时候,发现函数不支持解析 json 中文 key。 例如: select get_json_object({ "姓名":"张三" , "年龄":"18" }, $.姓名);我们希望的结果是得到姓名对应…...
Azure VM上意外禁用NIC如何还原恢复
创建一个windows虚拟机,并远程连接管理员的方式打开powershell 首先查看虚拟网卡,netsh interface show interface 然后禁用虚拟网卡 ,netsh interface set interface Ethernet disable 去Azure虚拟机控制台,打开串行控制台 控制台中键入cmd,…...
神经网络简单理解:机场登机
目录 神经网络简单理解:机场登机 编辑 激活函数:转为非线性问题 编辑 激活函数ReLU 通过神经元升维(神经元数量):提升线性转化能力 通过增加隐藏层:增加非线性转化能力编辑 模型越大,…...
Sping源码(七)— 后置处理器
简单回顾一下上一篇文章,是在BeanFacroty创建完之后,可以通过Editor和EditorRegistrar实现对类属性的自定义扩展,以及忽略要自动装配的Aware接口。 本篇帖子会顺着refresh()主流程方法接着向下执行。在讲invokeBeanFactoryPostProcessors方法…...
docker导出、导入镜像、提交
导出镜像到本地,然后可以通过压缩包的方式传输。 导出:docker image save 镜像名:版本号 > /home/quxiao/javatest.tgz 导入:docker image load -i /home/quxiao/javatest.tgz 删除镜像就得先删除容器,当你每运行一次镜像&…...
shell的变量
一、什么是变量 二、变量的命名 三、查看变量的值 env显示全局变量,刚刚定义的root_mess是局部变量 四、变量的定义 旧版本(7、8四个文件都加载)和新版本(9只加载两个etc)不一样,所以su - 现在要永久生效在…...
CentOS系统环境搭建(十三)——CentOS7安装nvm
centos系统环境搭建专栏🔗点击跳转 CentOS7.9安装nvm 文章目录 CentOS7.9安装nvm1.安装2.刷新系统环境3.查看所有node4.安装Node.js版本5.查看已安装版本号6.使用指定版本7.设置默认版本8.验证 在我们的日常开发中经常会遇到这种情况:手上有好几个项目&…...
uniapp评论列表插件获取
从评论列表,回复,点赞,删除,留言板 - DCloud 插件市场里导入,并使用。 代码样式优化及接入如下: <template><view class"hb-comment"><!-- 阅读数-start --><view v-if&q…...
3.redis数据结构之List
List-列表类型:L&R 列表类型:有序、可重复 Arraylist和linkedlist的区别 Arraylist是使用数组来存储数据,特点:查询快、增删慢 Linkedlist是使用双向链表存储数据,特点:增删快、查询慢,但是查询链表两端…...
安装使用MySQL8遇到的问题记录
1、root密码 启动运行后 /var/log/mysqld.log 存在默认密码 2023-08-21T15:58:17.469516Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.34) initializing of server in progress as process 61233 2023-08-21T15:58:17.478009Z 1 [System] [MY-013576] [I…...
Mysql、Oracle 中锁表问题解决办法
MySQL中锁表问题的解决方法: 1. 确定锁定表的原因: 首先,需要确定是什么原因导致了表的锁定。可能的原因包括长时间的事务、大量的并发查询、表维护操作等。 2. 查看锁定信息: 使用以下命令可以查看当前MySQL数据库中的锁定信…...
AUTOSAR规范与ECU软件开发(实践篇)5.1 ETAS ISOLAR-A工具简介
前言 如前所述, 开发者可以先在系统级设计工具ISOLAR-A中设计软件组件框架, 包括端口接口、 端口等, 即创建各软件组件arxml描述性文件; 再将这些软件组件描述性文件导入到行为建模工具, 如Matlab/Simulink中完成内部行为建模。 亦可以先在行为建模工具中完成逻辑建模, 再…...
shell脚本——expect脚本免交互
目录 一.Here Document 1.1.定义 1.2.多行重定向 二.expect实现免交互 2.1.基础免交互改密码 2.2.expect定义 2.3.expect基本命令 2.4.expect实现免交互ssh主机 一.Here Document 1.1.定义 使用I/O重定向的方式将命令列表提供给交互式程序,是标准输 入的一…...
ubuntu18.04安装远程控制软件ToDest方法,针对官网指令报错情况
有时我们在家办公,需要控制实验室的笔记本,因此好用的远程控制软件会让我们的工作事半功倍! 常用的远程控制软件有ToDesk,向日葵,以及TeamViewer,但是为感觉ToDesk更流畅一些,所以这里介绍一下…...
系统架构设计师之缓存技术:Redis持久化的两种方式-RDB和AOF
系统架构设计师之缓存技术:Redis持久化的两种方式-RDB和AOF...
成都奶茶加盟网站建设/免费推广的方式
编码成分子的信号传输(如激素、信息素)是人体用于确保细胞间通信的常用系统之一,在体外通过分子通信(MC)领域模拟了一种信息传输形式。然而,在实验室中复制MC仍然面临着许多挑战,例如MC中可以同时编码、传输和解码的化学载体数量的限制。该项…...
如今做哪个网站能致富/视频外链在线生成
http://www.opengpu.org/forum.php?modviewthread&tid7164&extrapage%3D1火影忍者鸣人 疾风传 终级风暴2以超越动画作为目标的游戏视觉效果。去年,被看作达到动画般的画面品质的[火影忍者鸣人终级风暴],与其说是震惊了游戏界,不如说…...
在手机上怎么注册公司/一个网站可以优化多少关键词
智能家居网络随着集成技术、通信技术、互操作能力和布线标准的实现而不断改进。它涉及对家庭网络内所有的智能家具、设备和系统的操作、管理以及集成技术的应用 。其技术特点表现如下: 1.通过家庭网关及其系统软件建立智能家居平台系统 家庭网关是智能…...
哪个网站找做软件下载/windows系统优化软件
两种方法配置linux网络:一、图形化界面#nmtui修改网络参数二、修改配置文件#vi /etc/sysconfig/network-scripts/ifcfg-ens33TYPEEthernet #类型为以太网,常见有的Ethernet, BridgeBOOTPROTOstatic #静态ip或者DHCP动态获取…...
网站建设中iis/最近一周的新闻
最近刚做好一个站,基于rails 3,教程为主,大家捧场看看,谢谢!www.yo945.com 有事耽搁了几天,今天断续学习。 串口的理论知识我就不记了,网上多的是。51单片机的串口,有4种方式&#x…...
网站开发公司经营范围怎么写/网络营销有哪些功能
2.7 工作空间-Work Space介绍 工作空间是WorkBench3.3集成开发环境对项目工程进行集中管理的空间,用户创建的BootRom工程、VxWorks工程、Downloadable工程和静态库工程等都存在于Work Space中,通过工作空间可以对工程进行编辑、编译、调试等,下面对其进行详细介绍。 2.…...