7.Redis-list

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.mzph.cn/news/60759.shtml

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

相关文章

拓世科技集团 | “书剑人生”李步云学术思想研讨会暨李步云先生九十华诞志庆

2023年&#xff0c;中国改革开放迎来了45周年&#xff0c;改革春风浩荡&#xff0c;席卷神州大地&#xff0c;45年间&#xff0c;中国特色社会主义伟大事业大步迈入崭新境界&#xff0c;一路上结出了饶为丰硕的果实。中华民族在这45年间的砥砺前行&#xff0c;不仅使中国的经济…

学会电子商务个性化这一招,让你的客户源源不断

在增加销售额和创建客户喜爱的品牌时&#xff0c;电子商务个性化是您成功的关键。但是&#xff0c;个性化您的在线购物体验的各个方面似乎都不是那么简单。 幸运的是&#xff0c;您看到了这一篇文章。在本文中&#xff0c;我们将探讨为什么电子商务个性化如此重要。在此过程中…

5. 线性层及其他层

5.1 神经网络结构 5.2 线性拉平 import torch import torchvision from torch import nn from torch.nn import ReLU from torch.nn import Sigmoid from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterdataset torchvision.datase…

【核心复现】基于合作博弈的综合能源系统电-热-气协同优化运行策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

信看课堂笔记—LDO和DC-DC电路打PK

LDO&#xff08;low dropout voltage regulator&#xff0c;低压差线性稳压器&#xff09;和DC-DC(Direct current-Direct current converter&#xff0c;直流电压转直流电压转换器)电源是非常常见的电源电路&#xff0c;LDO 出来的比较早&#xff0c;像老戏骨一样&#xff0c;…

2023年高教社杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

QQ邮件营销

邮件营销效果好的莫过于QQ邮件营销&#xff0c;QQ邮件收件会自动弹窗提示&#xff0c;邮件的阅读率是所有目前邮箱中最高的&#xff0c;而QQ邮件规则使用的叶贝思反垃圾邮件算法会有效防止一般的群发邮件&#xff0c;一米智能QQ邮件营销系统针对性的解决了这个难题。另外我们对…

分布式集群——jdk配置与zookeeper环境搭建

系列文章目录 分布式集群——jdk配置与zookeeper环境搭建 分布式集群——搭建Hadoop环境以及相关的Hadoop介绍 文章目录 系列文章目录 前言 一 zookeeper介绍与环境配置 1.1 zookeeper的学习 1.2 Zookeeper的主要功能 1.2.1 znode的节点类型 1.2.2 zookeeper的实现 …

【实战】十一、看板页面及任务组页面开发(六) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十八)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

IIS搭建本地电脑服务器:通过内网穿透技术实现公网访问的步骤指南

1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xff0c;比如网页运行的Apache和Nginx、数据库软件MySQL和MSSQL之类&#xff0c;为方便用户使用&#xff0c;还出现了XAMPP、PHPStudy、宝塔面板等等一系列集成服务&#xff0c;都是为了方便我们…

应用程序管理工具

应用程序管理是 DevOps 的重要组成部分。它可以定义为在所有阶段监控和管理软件应用程序的可用性、运行状况、性能和功能的过程&#xff0c;包括规划、设计、构建、测试、部署、维护和更新。这意味着应用程序从概念到停止都受到监控。 应用程序管理的重要性 管理应用程序可确…

uni-app中使用iconfont彩色图标

uni-app中使用iconfont彩色图标 大家好&#xff0c;今天我们来学习一下uni-app中使用iconfont彩色图标&#xff0c;好好看&#xff0c;好好学&#xff0c;超详细的 第一步 首先&#xff0c;从iconfont官网&#xff08;iconfont-阿里巴巴矢量图标库&#xff09;选择自己需要的图…

数据库导出工具

之前根据数据库升级需求&#xff0c;需要导出旧版本数据&#xff08;sqlserver 6.5&#xff09;&#xff0c;利用c# winfrom写了一个小工具&#xff0c;导出数据。 →→→→→多了不说&#xff0c;少了不唠。进入正题→→→→ 连接数据库&#xff1a;输入数据库信息 连接成功…

K8S:K8S自动化运维容器Docker集群

文章目录 一.k8s概述1.k8s是什么2.为什么要用K8S3.作用及功能4.k8s容器集群管理系统 二.K8S的特性1.弹性伸缩2.自我修复3.服务发现和复制均衡4.自动发布和回滚5.集中化配置管理和秘钥管理6.存储编排7.任务批量处理运行 三.K8S的集群架构四、K8S的核心组件1、Master组件&#xf…

前端文件、图片直传OOS、分片上传、el-upload上传(vue+elementUI)

前言&#xff1a;基于天翼云的面相对象存储(Object-Oriented Storage&#xff0c;OOS),实现小文件的直接上传&#xff0c;大文件的分片上传。 开发文档地址&#xff1a;网址 上传之前的相关操作&#xff1a;注册账户&#xff0c;创建 AccessKeyId 和 AccessSecretKey之后&…

36种水果和蔬菜识别(pytorch框架,深度卷积网络模型,可以实现照片连续识别和视频识别)

1.效果视频&#xff1a;36种水果和蔬菜识别&#xff08;pytorch框架&#xff0c;深度卷积网络模型&#xff0c;可以实现照片连续识别和视频识别&#xff09;_哔哩哔哩_bilibili 2.项目文件夹 第一个文件夹&#xff08;data&#xff09;&#xff1a; 装载的是原始图像 第二个文…

移动端通讯录相关代码

vue3更新版本 附件地址 代码在附件里噜 太多了不好贴

【MYSQL】排序时 如何将0排到最后,并让其他值按正序展示?

背景&#xff1a;展示排名时需要1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;这样展示但是有些没有排名得数据字段默认值时0&#xff0c;这时直接用ASC就会出现问题 实现效果 实现方式&#xff1a;使用MySQL的ORDER BY语句来实现。以下是一个示例的SQL查…

Python编程——深入了解不可变的元组

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、元组是什么 二、元组的定义 1、相同类型组成元组…

中间件环境搭建配置过程解读

中间件环境搭建 目录 中间件环境搭建xampp 搭建环境Tomcat环境配置安装mysql连接mysql 问题解决 xampp 搭建环境 安装xampp服务集成环境工具 官网地址下载项目压缩包&#xff0c;将项目文件夹放在xampp安装目录的htdocs文件夹下初始化xampp&#xff1a;运行目录内的setup_xamp…