【redis】list类型:基本命令(下)

news2025/3/14 12:56:49

文章目录

  • LLEN
  • LREM
  • LTRIM
  • LSET
  • 阻塞版本命令
    • BLPOP 和 BRPOP
    • 区别
    • 使用方式
  • 命令小结
  • 内部编码

LLEN

获取 list 的长度


语法:

LLEN key
  • 时间复杂度: O ( 1 ) O(1) O(1)
  • 返回值: list 长度image.png

LREM

删除 countkey 中的元素


语法:

LREM key count element
  • 时间复杂度: O ( N + M ) O(N+M) O(N+M) N N Nlist 长度, M M M 是需要移除的元素个数
  • count > 0:要删除的元素从左往右找
  • count < 0:要删除的元素从右往左找
  • count = 0:删除所有的指定元素image.png|271

LTRIM

保留 startstop 之间区间内的元素,区间外元素就直接被删除了


语法:

LTRIM key start stop
  • 时间复杂度: O ( N ) O(N) O(N) N N N 是被删除的元素个数image.png|268

LSET

根据下标,修改元素


语法:

LSET key index element
  • 时间复杂度: O ( N ) O(N) O(N)image.png|315
  • LINDEX 可以很好的处理下标越界的情况,直接返回 nillist 则会报错image.png|376

阻塞版本命令

阻塞:当前的线程不走了,代码不继续执行了。会在满足一定的条件之后被唤醒

BLPOP 和 BRPOP

B ==> block(阻塞),阻塞队列(BlockingQueue

使用队列来作为中间的“交易场所”,期望这个队列有两个特性:

  1. 线程安全
  2. 阻塞
    1. 如果队列为空,尝试出队列,就会产生阻塞。直到队列不空,阻塞解除
    2. 如果队列为满,尝试入队列,也会产生阻塞。直到队列不满,阻塞解除

Redis 中的 list 也相当于阻塞队列一样,线程安全是通过单线程模型支持的。阻塞,则只支持“队列为空”的情况,不考虑“队列满”

  • 如果 list 中存在元素,那么 BLPOP/BRPOPLPOP/RPOP 作用完全相同。
  • 如果 list 中为空,那么 BLPOP/BRPOP 就会产生阻塞,一直阻塞到队列不空为止

区别

阻塞版本会根据 timeout,阻塞一段时间,期间 Redis 可执行其他命令

  • 使用 BLPOP/BRPOP 的时候,这里是可以显示设置阻塞时间的(不一定是无休止的等待)

命令中如果设置了多个键,那么会从左向右进行遍历键,一旦有一个键对应的列表中可以弹出元素,命令立即返回

  • BLPOP/BRPOP 都是可以同时去尝试获取多个 key 的列表的元素的
  • 多个 key 对应多个 list,这多个 list 哪个有元素了,就会返回哪个元素

如果多个客户端同时针对同一个 key 执行 POP,则最先执行命令的客户端会得到弹出的元素

使用方式

语法:

BLPOP key [key ...] timeout
  • 此处可以指定一个 key 或者多个 key,每个 key 都对应一个 list
    • 如果这些 list 有任何一个非空,BLPOP 都能够把这里的元素给获取到,立即返回
    • 如果这些 list 都为空,此时就要阻塞等待,等待其他客户端往这些 list 中插入元素
    • 此处还可以指定超时时间,单位是Redis 6,超时时间允许设为小数;Redis 5 中,超时时间得是整数)

  1. 针对一个非空的列表进行操作image.png
    • 返回的结果相当于一个 pair(二元组)
    • 一方面是告诉我们当前的数据来自于哪个 key
    • 一方面告诉我们取到的数据是啥

  1. 针对空的列表进行操作
    image.png

image.png|337

  • key 中没有元素的时候,一直阻塞。后来新开一个终端窗口,将 key 里面新加元素,阻塞就结束了,并显示了阻塞时间

  1. 针对多个 keyimage.png|378
  • 当四个 key 都是空的时候,就会阻塞住,但只要其中一个 key 有了元素,阻塞就会停止

当前这俩命令虽然可以一定程度的满足“消息队列”这样的需求,但整体来说,这俩功能还是比较有限

命令小结

image.png

内部编码

  • ziplist(压缩列表),把数据按照更紧凑的压缩形式进行表示,节省空间。当元素个数多了,操作起来效率会降低
  • 当元素个数多了之后,就会变成 linkedlist(链表)

quicklist 相当于是链表和压缩列表的结合,整体还是一个链表,链表的每个节点,是一个压缩列表

  • 每个压缩列表,都不让它太大,同时再把多个压缩列表通过链式结构连起来

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

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

相关文章

【数据挖掘】知识蒸馏(Knowledge Distillation, KD)

1. 概念 知识蒸馏&#xff08;Knowledge Distillation, KD&#xff09;是一种模型压缩和知识迁移技术&#xff0c;旨在将大型复杂模型&#xff08;称为教师模型&#xff09;中的知识传递给一个较小的模型&#xff08;称为学生模型&#xff09;&#xff0c;以减少计算成本&…

VSCode 搭建C++编程环境 2025新版图文安装教程(100%搭建成功,VSCode安装+C++环境搭建+运行测试+背景图设置)

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、VScode下载及安装二、安装 MinGW-w64 工具链三、Windows环境变量配置四、检查 M…

Ubuntu24.04 LTS 版本 Linux 系统在线和离线安装 Docker 和 Docker compose

一、更换软件源并更新系统 在 Ubuntu 24.04 LTS 中&#xff0c;系统引入了全新的软件源配置格式。现在的源配置文件内容更加结构化且清晰&#xff0c;主要包含了软件类型 (Types)、源地址 (URIs)、版本代号 (Suites) 以及组件 (Components) 等信息。 # cat /etc/apt/sources.li…

MTK Android12 最近历史任务 最左侧的清除历史任务改到页面底部

Android最近历史任务页面 -清除所有- 功能按钮放到底部 文章目录 需求需求原因 修改的核心文件实现方案最近历史任务基本UI结构了解代码实现思路实现方案RecentsViewTaskOverlayFactory在overview_actions_containerOverviewActionsView 实际效果 总结 需求 最近历史任务重&am…

TCP协议支持全双工原因TCP发送接收数据是生产者消费者模型

一、TCP支持全双工的原因 TCP协议支持全双工&#xff0c;即使用TCP协议进行通信时&#xff0c;服务端和客户端可以同时进行数据的发送和接收&#xff0c;互不干扰&#xff0c;实现同时双向传输数据。 这是因为使用TCP协议通信时&#xff0c;读写套接字的文件描述符既用来发送…

文件操作2

7. ⽂件读取结束的判定 7.1 被错误使用的 feof 牢记&#xff1a;在文件读取过程中&#xff0c;不能用 feof 函数的返回值直接来判断文件的是否结束。 feof 的作用是&#xff1a;当文件读取结束的时候&#xff0c;判断读取结束的原因是否是&#xff1a;遇到文件尾结束。 1. …

《又是二叉树?递归与回溯的经典应用》

“ 我喜欢晴天&#xff0c;你恰好是最好的太阳” 226.翻转二叉树 力扣题目链接(opens new window) 翻转一棵二叉树。 这道题我们可以通过递归法解决&#xff0c;我们只要递归的把每一个节点的左右孩子反转一下就能解决了。 代码如下&#xff1a; var invertTree function(ro…

Qt/C++音视频开发82-系统音量值获取和设置/音量大小/静音

一、前言 在音视频开发中&#xff0c;音量的控制分两块&#xff0c;一个是控制播放器本身的音量&#xff0c;绝大部分场景都是需要控制这个&#xff0c;这个不会影响系统音量的设置。还有一种场景是需要控制系统的音量&#xff0c;因为播放器本身的音量是在系统音量的基础上控…

从零到精通文本指令:打造个人AI助理的完整指令库(Prompt 指令实操)

文章目录 从零到精通文本指令&#xff1a;打造个人AI助理的完整指令库(Prompt 指令实操)创作指令创作指令**润色指令****扩写指令** 问答指令直接问答材料问答时间逻辑问答 总结、摘要、翻译指令总结信息抽取翻译 从零到精通文本指令&#xff1a;打造个人AI助理的完整指令库(Pr…

C# NX二次开发:获取模型中所有的草图并获取草图中的对象

大家好&#xff0c;今天接着讲NX二次开发获取草图相关。 获取草图的方法是从workPart中获取&#xff0c;如下面的例子所示&#xff1a; List<Tag> tags new List<Tag>(); SketchCollection sketchCollection workPart.Sketches; …

基于SpringBoot和MybatisPlus实现通用Controller

基于SpringBoot和MybatisPlus实现通用Controller&#xff0c;只需要创建实体类和mapper接口&#xff0c;单表增删改查接口就已经实现&#xff0c;提升开发效率 1.定义通用controller package com.xian.controller;import cn.hutool.core.map.MapUtil; import com.baomidou.my…

锤头线和倒锤头线

1、锤头线 是指一根没有上影线或上影线很短,而下影线很长,实体却很小的K线。其K线实体可以是阴线或是阳线,类似于T字。 锤头线的特征有以下三点: 实体很小,下影线长度大于或等于实体的两倍。下影线越长时,如股价处于低位,则上涨的可能性越大。 如股价处于高位,则下跌…

蓝桥杯嵌入式组第十二届省赛题目解析+STM32G431RBT6实现源码

文章目录 1.题目解析1.1 分而治之&#xff0c;藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 LED模块1.3.3 LCD模块1.3.4 TIM模块1.3.5 UART模块1.3.5.1 uart数据解析 2.源码3.第十二届题目 前言&#xff1a;STM32G431RBT6实现嵌入式组第十二届题目解析源码&#…

STM32上实现简化版的AUTOSAR DEM模块

文章目录 摘要摘要 在一些可以不使用AUTOSAR的项目中,往往也有故障检测和DTC存储的需求,开发一套类似于AUTOSAR DEM模块的软件代码,能够满足DTC的检出和存储,使用FalshDB代替Nvm模块,轻松构建持久化存储,如果你也有这样的需求,请阅读本篇,希望能够帮到你。 /*********…

如何用终端运行一个SpringBoot项目

在项目开发阶段&#xff0c;为了能够快速测试一个SpringBoot项目的执行结果&#xff0c;就可以采用终端&#xff08;黑窗&#xff09;运行查看&#xff0c;因为我们不能要求每一个客户都安装idea并且适配我们的项目版本。 下面将展示打包运行这两个方面的过程&#xff1a; 创建…

多线程与并发编程 面试专题

多线程与并发编程 面试专题 线程的基础概念基础概念线程的创建线程的状态线程的终止方式start 与 run 区别线程的常用方法 锁锁的分类深入synchronized深入ReentrantLock死锁问题 阻塞队列线程池 线程的基础概念 基础概念 进程与线程 进程&#xff1a;指运行中的程序。 比如我…

米尔电子-LR3568-烧录鸿蒙

最近开始搞鸿蒙&#xff0c;用的是米尔的LR3568。 开贴记录。 首先要在LR3568上烧录鸿蒙 一、安装准备 1.从米尔电子上下载资料 网址:米尔开发者中心 注册完成后&#xff0c;进入页面&#xff0c;选择我的产品&#xff0c;添加PN和SN PN和SN可以在包装盒上找到 添加到这里…

基于Flink SQL的实时指标多维分析模型

数据流程介绍 1.创建源表kafka接入消息队列数据&#xff0c;定义字段映射规则&#xff1b; 2.创建目标表es_sink配置Elasticsearch输出&#xff1b; 3.通过多级视图&#xff08;tmp→tmp_dedup→tmp1/tmp2→tmp3→tmp_groupby&#xff09;实现数据清洗、去重、状态计算&#x…

【从零开始学习计算机科学】数据库系统(二)关系数据库 与 关系代数

【从零开始学习计算机科学】数据库系统(二)关系数据库 与 关系代数 关系数据库结构化查询语言SQL数据定义语言(DDL)数据查询语言(Data Query Language, DQL)数据操纵语言(Data Manipulation Language, DML)数据控制语言(Data Control Language, DCL)关系型数据库的优…

Linux驱动开发实战(四):设备树点RGB灯

Linux驱动开发实战&#xff08;四&#xff09;&#xff1a;设备树点RGB灯 文章目录 Linux驱动开发实战&#xff08;四&#xff09;&#xff1a;设备树点RGB灯前言一、驱动实现1.1 驱动设计思路1.2 关键数据结构1.3 字符设备操作函数1.4 平台驱动探测函数1.5 匹配表和平台驱动结…