7.Redis-list

news2025/1/3 1:36:51

list

    • list常用命令
      • lpush
      • lrange
      • lpushx
      • rpush
      • rpushx
      • lpop / rpop
      • lindex
      • linsert
      • llen
      • lrem
      • ltrim
      • lset
    • 阻塞版本命令
      • blpop/brpop
    • 总结
    • 内部编码
    • 应用场景
      • 使用redis作为消息队列


redis中的 list 是一个双端队列, list 相当于是数组或者顺序表。list 并非是一个简单的数组,而是更接近于 c++中 std::deque。列表类型是⽤来存储多个有序的字符串,列表中的每个字符串称为元素(element),⼀个列表最多可以存储2^32 - 1 个元素。

list常用命令

lpush

作用:将⼀个或者多个元素头插到list中。
语法:
LPUSH key element [element ...]
返回值:插⼊后 list 的⻓度。
在这里插入图片描述

lrange

作用:获取从 start 到 end 区间的所有元素,左闭右闭。
语法:
LRANGE key start stop
在这里插入图片描述

lpushx

其中x -> exists的意思。
作用:在 key 存在时,将⼀个或者多个元素从左侧放⼊(头插)到 list 中。不存在,直接返回
语法:
LPUSHX key element [element ...]
在这里插入图片描述

rpush

作用:将⼀个或者多个元素尾插到 list 中。当key不存在时会创建这个key再插入
语法:
RPUSH key element [element ...]
在这里插入图片描述

rpushx

作用:当 key 存在时,将⼀个或者多个元素尾插 到 list 中。
语法:
RPUSHX key element [element ...]
在这里插入图片描述

lpop / rpop

lpop:头删。rpop:尾删
语法:lpop/rpop key [count]
在当前的 redis 5 版本中,都是没有count参数的,从 redis 6.2版本,新增了一个count 参数,表示的是要删除几个元素~~
在这里插入图片描述

lindex

作用:根据下标找到list中对应下标的元素
语法:
LINDEX key index
在这里插入图片描述
返回值:取出的元素或者 nil
时间复杂度:O(N)

linsert

作用:在特定位置插⼊元素,其中 pivot 不是下标,是基准值
语法:
LINSERT key <BEFORE | AFTER> pivot element
在这里插入图片描述
当基准值不存在时,则插入失败
在这里插入图片描述

llen

作用:获取 list ⻓度
语法:
llen key
在这里插入图片描述

lrem

其中rem 是 remove 的缩写
语法:
lrem key count element

  • count 表示的是要删除的个数
  • element 表示要删除的值
  • count > 0:删除从头到尾相等的count个元素。
  • count<0:删除从尾到头部coutn个相等的元素。
  • count = 0:删除与元素相等的所有元素。

count > 0示例如下:
在这里插入图片描述
count < 0 示例如下:
在这里插入图片描述
count = 0 示例如下:
在这里插入图片描述

ltrim

作用:保留 start 和 stop 之间区间内的元素。(区间外面两边的元素就直接被删除了)
语法:
ltrim key start stop
在这里插入图片描述

lset

作用:根据下标修改元素
语法:
lset key index element
在这里插入图片描述
时间复杂度:O(n)

阻塞版本命令

blpop/brpop

blpop 和 brpop 是 lpop 和 rpop 的阻塞版本,和对应非阻塞版本的作用基本⼀致,除了:

  • 在列表中有元素的情况下,阻塞和非阻塞表现是⼀致的。但如果列表中没有元素,非阻塞版本会理解返回 nil,但阻塞版本会根据 timeout,阻塞⼀段时间,期间 Redis 可以执行其他命令,但要求执行该命令的客户端会表现为阻塞状态。
  • 命令中如果设置了多个键,那么会从左向右进⾏遍历 key,⼀旦有⼀个 key 对应的列表中可以弹出元素,命令立即返回。
  • 如果多个客户端同时对⼀个键执行 pop,则最先执⾏命令的客户端会得到弹出的元素。

作用:用途主要就是用来作为“消息队列”
语法:
BLPOP/BRPOP key [key ...] timeout
在redis 5当中,timeout 时间只能是整数,但在redis 6及之后timeout时间允许设定成小数,timeout单位是秒。

当列表不为空时,lpop与blpop没有区别
在这里插入图片描述
当列表为空时且后续timeout时间内没有元素插入,lpop与blpop区别如下
在这里插入图片描述

当列表为空时且后续timeout时间内有元素插入,lpop与blpop区别如下
在这里插入图片描述

  1. 针对一个非空列表操作,有元素时立即返回弹出的元素与lpop一致
    在这里插入图片描述
  2. 针对一个空列表进行操作,当在timeout时间内有新元素插入
    在这里插入图片描述
    3.针对多个 key 进行操作
    在这里插入图片描述

总结

ps:本来是想弄成表格的,但是不会 markdown 这种将某几行的某一列合并成一个单元格这种语法,然后只能以图片的方式展现了,希望有会的人再评论区教教我,thanks~
在这里插入图片描述

内部编码

在之前的版本中 list 的内部编码为以下两种

  • ziplist(压缩列表):当列表的元素个数⼩于 list-max-ziplist-entries 配置(默认 512 个),同时列表中每个元素的⻓度都⼩于 list-max-ziplist-value 配置(默认 64 字节)时,Redis 会选⽤iplist 来作为列表的内部编码实现来减少内存消耗。
  • linkedlist(链表):当列表类型⽆法满⾜ ziplist 的条件时,Redis 会使⽤ linkedlist 作为列表的内部实现

在redis 3.2之后,redis内部编码只是 quicklist 一种。

  • quicklist 相当于是 链表 和压缩列表的结合,整体还是一个链表,链表的每个节点是一个压缩列表。
    在这里插入图片描述

应用场景

使用redis作为消息队列

Redis 可以使⽤ lpush + brpop 命令组合实现经典的阻塞式⽣产者-消费者模型队列,⽣产者客户端使⽤ lpush 从列表左侧插⼊元素,多个消费者客户端使⽤ brpop 命令阻塞式地从队列中 “争抢” 队⾸元素。通过多个客户端来保证消费的负载均衡和高可用性。
在这里插入图片描述
选择列表类型时,请参考:
同侧存取(lpush + lpop 或者 rpush + rpop)为栈
异侧存取(lpush + rpop 或者 rpush + lpop)为队列

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

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

相关文章

matlab使用教程(29)—微分方程实例

此示例说明如何使用 MATLAB 构造几种不同类型的微分方程并求解。MATLAB 提供了多种数值算法来求解各种微分方程&#xff1a; 1.初始值问题 vanderpoldemo 是用于定义 van der Pol 方程的函数 type vanderpoldemo function dydt vanderpoldemo(t,y,Mu) %VANDERPOLDEMO Defin…

UDP协议的重要知识点

UDP&#xff0c;即用户数据报协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;是一个简单的无连接的传输层协议。与TCP相比&#xff0c;UDP提供了更少的错误检查机制&#xff0c;并允许数据包在网络上更快地传输。在这篇博客中&#xff0c;我们将深入探讨UDP的…

【请求报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol】

1、问题描述 在请求服务时报错说SSL握手异常协议禁用啥的 javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)2、解决方法 在网上查找了方法原因后得知是jdk的问题 修改java.security 文件 Linu…

UG\NX二次开发BlockUI 进入NX的BlockUI编辑界面

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: 要使用BlockUI,需要先进入NX的BlockUI编辑界面。在低版本中,可以在Toolbar工具条中进入开始→所有应用模块→块UI样式编辑器;在高版本中,可以在Ribbon工具栏…

iframe如何用?常见的一些套路

文章目录 &#x1f30a;什么是iframe我们来看一个demoiframe的常用属性iframe的优缺点 &#x1f30a;点击劫持和安全策略&#x1f30a;postMessage通信postMessage &#x1f30a;iframe如何解决跨域资源链接 &#x1f30a;什么是iframe iframe 标签规定一个内联框架。内联框架…

阿里云轻量应用服务器Linux-Centos7下Oracle19c的配置

初始环境&#xff1a;阿里云轻量应用服务器已经安装Oracle19c 具体目标&#xff1a;配置Oracle Database 19c 目录 第一步&#xff1a;切换到Oracle命令行第二步&#xff1a;新建用户和表空间第三步&#xff1a;切换用户第四步&#xff1a;在当前用户下创建一些表第五步&#x…

自动驾驶和辅助驾驶系统的概念性架构(一)

摘要&#xff1a; 本文主要介绍包括功能模块图&#xff0c;涵盖了底层计算单元、示例工作负载和行业标准。 前言 本文档参考自动驾驶计算联盟(Autonomous Vehicle Computing Consortium)关于自动驾驶和辅助驾驶计算系统的概念系统架构。 该架构旨在与SAE L1-L5级别的自动驾驶保…

[Pandas] pandas.melt

melt是溶解 / 分解的意思&#xff0c;即拆分数据 melt()函数可以将一些列的内容进行合并&#xff0c;把宽表整合成长表 语法格式 pandas.melt(frame, id_varsNone, value_varsNone, var_nameNone, value_namevalue)参数说明 frame&#xff1a;要处理的数据集 id_vars&#…

超时取消订单

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

BlockUI专栏目录

文章作者&#xff1a;里海 来源网站&#xff1a;王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C-CSDN博客 简介&#xff1a; BlockUI是一个设计NX对话框的工具&#xff0c;是官方推荐使用的对话框制作方法&#xff0c;能够与NX自身风格相统一&#xff0c;并且在实际…

el-checkbox 多选搜索查询,搜索后选中状态仍保留

<template><div><div class"half-transfer"><div class"el-transfer-panel"><div><el-checkbox v-model"selectAll" change"handleSelectAll">全部</el-checkbox></div><el-input…

java入坑之泛型

一、泛型入门 1.1基础概念 Java泛型是JDK 5中引入的一个新特性&#xff0c;它提供了编译时类型安全检测机制&#xff0c;该机制允许程序员在编译时检测到非法的类型 泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。这意味着你可以使用一套代码…

【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )

文章目录 一、NavigationUI 类简介二、NavigationUI 类使用流程1、创建 Fragment2、创建 NavigationGraph3、Activity 导入 NavHostFragment4、创建菜单5、Activity 界面开发 NavigationUI 的主要逻辑 ( 重点 )a、添加 Fragment 布局b、处理 Navigation 导航逻辑 ( 重点 )c、启…

__call__函数

一、定义 在Python中&#xff0c;__call__函数是一个特殊的方法&#xff0c;用于使一个对象可以像函数一样被调用。当一个对象定义了__call__方法时&#xff0c;它就成为了一个可调用对象。 二、使用 class Counter:def __init__(self):self.count 0def __call__(self):sel…

查漏补缺 - 构造函数,原型,this,原型链,继承

目录 1&#xff0c;构造函数2&#xff0c;原型3&#xff0c;this4&#xff0c;原型链1&#xff0c;特点2&#xff0c;Object.prototype.toString()3&#xff0c;instanceof 运算符4&#xff0c;Object.getPrototypeOf()5&#xff0c;创建空原型对象6&#xff0c;面试题 5&#…

异步迭代器

一、什么是异步迭代器&#xff1f; 实现了 __aiter__() 和 __anext__() 方法的对象。__anext__ 必须返回一个 awaitable对象。async for 会处理异步迭代器的 __anext__() 方法所返回的可等待对象&#xff0c;直到其引发一个 StopAsyncIteration 异常。 二、实例 class Async…

Python - functools.partial设置回调函数处理异步任务基本使用

一. 前言 在Python中&#xff0c;回调函数是指在一个函数执行完成后&#xff0c;调用另一个函数的过程。通常情况下&#xff0c;回调函数作为参数传递给原始函数&#xff0c;原始函数在执行完自己的逻辑后&#xff0c;会自动调用回调函数并将结果作为参数传递给它。 二. 回调…

知了汇智承办网信人才培训活动第二期,助力数字化网安人才储备

在数字经济时代&#xff0c;随着信息化的快速发展和互联网的深度应用&#xff0c;网络信息安全问题日益突出&#xff0c;成为制约数字经济健康发展的重要因素。为了有效提升网络安全人才的专业素质和技术能力&#xff0c;保障国家信息安全。知了汇智作为数字产教融合基地&#…

学习JAVA打卡第四十七天

日期的格式化 程序可能希望按照某种习惯来输出时间。例如时间的顺序&#xff1a;年/月/日或年/月/日/时/分/秒。可以直接使用String类调用format方法对日期进行格式化。 Format方法 Format方法&#xff1a; format&#xff08;格式化模式,日期列表&#xff09; 按照“格式…

FFT代码上的实现细节

ω \omega ω 的计算 ω n 1 \omega_n^1 ωn1​ 的计算 考虑单位圆&#xff0c; ω n 1 \omega_n^1 ωn1​ 为&#xff1a; 也就是&#xff1a; 注&#xff1a;op为判断当前为dft还是idft ω n i \omega_n^i ωni​ 的计算 当要计算 ω n i \omega_n^i ωni​ 时&#xf…