Redis——常用数据类型List

devtools/2024/9/19 11:34:24/ 标签: redis, list, 数据库

目录

      • List列表
        • 常用命令
          • lpush
          • lpushx
          • rpush
          • rpush
          • lrange
          • lpop
          • rpop
          • lindex
          • linsert
          • llen
          • lrem
          • ltrim key start stop
          • lset
        • 阻塞版本命令
          • blpop
          • brpop
        • list的编码方式
        • list的应用

List列表

Redis中的list相当于数组,或者 顺序表,一些常用的操作可以通过下面这张图来理解

在这里插入图片描述

实际上,这个并不是一个简单的数组,而是类似于一个“双端队列”

在这里插入图片描述

列表类型的特点:

  1. 列表中的元素是有序的,这意味着可以通过索引下标获取某个元素或者某个范围的元素列表,例如要上图的第 5 个元素,可以执行 lindex user:1:messages 4 或者倒数第 1 个元素,lindexuser:1:messages -1 就可以得到元素 e
  2. 区分获取和删除的区别,例如图 2-20 中的 lrem 1 b 是从列表中把从左数遇到的前 1 个 b 元素删除,这个操作会导致列表的长度从 5 变成 4;但是执⾏ lindex 4 只会获取元素,但列表长度是不会变化的
  3. 列表中的元素是允许重复的,如下图

在这里插入图片描述

常用命令
lpush
LPUSH key element [element ...]//将⼀个或者多个元素从左侧放⼊(头插)到 list 中
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
lpushx
 LPUSHX key element [element ...]//在 key 存在时,将⼀个或者多个元素从左侧放⼊(头插)到 list 中。不存在,直接返回
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
rpush
RPUSH key element [element ...]//将⼀个或者多个元素从右侧放⼊(尾插)到 list 中
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
rpush
RPUSHX key element [element ...]//在 key 存在时,将⼀个或者多个元素从右侧放⼊(尾插)到 list 中
//时间复杂度:只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数
//返回值:插⼊后 list 的⻓度
lrange
 LRANGE key start stop//获取从 start 到 end 区间的所有元素,左闭右闭,下标支持负数
//时间复杂度:O(N)
//返回值:指定区间的元素,如果给定区间非法,比如超出下标,Redis中会尽可能的获取区间的内容
lpop
LPOP key [count](redis 6.2版本及其以上支持这个count,一次pop多个)//从 list 左侧取出元素(即头删)
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
rpop
RPOP key [count](redis 6.2版本及其以上支持这个count,一次pop多个)//从 list 右侧取出元素(即尾删)
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
lindex
LINDEX key index//获取从左数第 index 位置的元素
//时间复杂度:O(N)
//返回值:取出的元素或者 nil
linsert
LINSERT key <BEFORE | AFTER> pivot element//在特定位置插⼊元素 , before和after选一个,在privot之前插入,或者之后插入,这个pivot是元素的值,不是下标
//时间复杂度:O(N)
//返回值:插⼊后的 list ⻓度
llen
LLEN key//获取 list ⻓度
//时间复杂度:O(1)
//返回值:list 的⻓度
lrem
LREM key count element//指定一个元素精准删除//count为要删除的个数,element为要删除的值
//count>0,从左往右删除element两次
//count<0,从右往左删除element两次
//count=0,删除所有的element
ltrim key start stop
LTRIM key start stop//保留start和stop之间的元素(区间外两边的元素就直接被删除了)
//时间复杂度O(n)
lset
LSET key index element//根据下标修改元素
//时间复杂度O(n)
阻塞版本命令

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

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

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

blpop和brpop都是可以同时去尝试多个key的列表的元素的,多个key对应多个list,这多个list哪个有元素了,就会返哪个元素

blpop
BLPOP key [key ...] timeout//LPOP 的阻塞版本
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
brpop
BRPOP key [key ...] timeout//RPOP 的阻塞版本
//时间复杂度:O(1)
//返回值:取出的元素或者 nil
list_190">list的编码方式

列表类型的内部编码有两种:

  1. ziplist(压缩列表):当列表的元素个数小于 list-max-ziplist-entries 配置(默认 512 个),同时列表中每个元素的长度都小于 list-max-ziplist-value 配置(默认 64 字节)时,Redis 会选用 ziplist 来作为列表的内部编码实现来减少内存消耗。。
  2. linkedlist(链表):当列表类型无法满足 ziplist 的条件时,Redis 会使⽤ linkedlist 作为列表的内 部实现。
list_197">list的应用

消息队列

**微博 Timeline


http://www.ppmy.cn/devtools/111724.html

相关文章

static 初始化报错

在 C 或 C 中&#xff0c;当你在函数中使用 static 关键字初始化一个局部变量时&#xff0c;编译器要求初始化器&#xff08;initializer&#xff09;是编译时常量。如果你尝试用动态计算的值初始化 static 变量&#xff08;如函数参数或运行时生成的值&#xff09;&#xff0c…

IDEA 常用插件推荐,美观又实用!

1、 TONGYl Lingma - Your Al Coding Assistant. Type less, Code more. 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&…

Webpack 概念速通:从入门到掌握构建工具的精髓

Webpack基本概念 这里我们先简单熟悉下Webpack的基本概念&#xff0c;我们在搭建项目的时候都会要用到的&#xff01; 这里我们分享的着重点是基本概念而不是具体配置项和使用方法 依赖图(dependency graph)模式(mode)入口(entry)输出(output)加载器(loader)插件(plugin)源映射…

基于微信小程序的图书馆预约占座系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的图…

RHCE--复习(二)之时间同步服务器

一、计时方式的发展 1.1.古代计时方式 在远古时期&#xff0c;人类用来确定时间的方式是一些自然界“相对”宜古不变的周期。如地球的公转是为一年&#xff0c;月球的公转是为一月&#xff0c;地球的自转是为一天等&#xff0c;最早的计时可以追溯到公元前大约2000年&#xff…

基于SpringBoot的古城墙景区管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的古城墙景区管理系…

Excel 基础知识-操作手册1

Excel基础操作知识 一、工作窗口的视图控制 1、创建新窗口&#xff1a;依次点击【视图】----【新建窗口】命令&#xff0c;即可为当前工作簿创建新的窗口。在原有的工作簿中更改标题或表格内容时&#xff0c;新建的工作簿也会相应的更改。 2、窗口切换&#xff1a;在【视图】…

css父容器溢出隐藏 子容器溢出滚动

在父容器上设置 overflow: hidden; 可以隐藏溢出的内容。如果你想要在子容器溢出时出现滚动条&#xff0c;可以设置 overflow: auto;。 HTML: <div class"parent"><div class"child">这里是一些可能会溢出的内容...</div> </div&g…

UNION嵌套STRUCT的两种类型

1. STRUCT里面的总长度大于UNION中的最大长度 在UNION类型中&#xff0c;嵌套如STRUCT类型&#xff0c;其中STRUCT的类型还比UNION类型中最大的类型的长度还长的时候&#xff0c;会如何处理呢&#xff0c;看下面示例 程序源码 #include "stdafx.h"typedef unsigned…

HarmonyOS开发5.0【应用程序包】

对比HarmonyOS 与 Android 的应用程序包 HarmonyOS 的应用程序包与 Android 的应用程序包在多个方面存在一些不同之处&#xff0c;主要体现的方面&#xff1a; 包格式&#xff08;从包的后缀名可以看出来&#xff09; HarmonyOS: 使用 .hap 格式作为应用程序包。这个格式是 …

linux限制普通用户只能上传文件不能下载和传文件到到其他服务器

1、实施方案 因为用户在linux系统默认主要是通过sftp、scp和lrzsz命令实现文件上传和下载&#xff0c;可以通过以下几点来防制普通用户的上传和下载文件&#xff0c;相关设置必须使用root用户进行操作。 禁用普通用户使用scp命令&#xff0c;可以防止普通用户使用winscp软件下…

利用 Zero-1-2-3 进行多视图 3D 重建:从单图像到多视图 3D 模型的生成

3D 模型生成在计算机视觉领域有着广泛的应用&#xff0c;从虚拟现实到自动驾驶&#xff0c;基于单张图像的 3D 重建技术正在迅速发展。这篇博客将带你深入探索如何使用 Zero-1-2-3 框架进行多视图 3D 重建&#xff0c;通过详细解析该框架中的代码结构和功能&#xff0c;帮助你理…

WTL580-电子锁微波雷达应用解决方案,5.8GHz精准人体感知,触发高效交互新体验

一、简介 随着智能电子门锁普及&#xff0c;电子门锁的市场也随着打开&#xff0c;安装智能化电子门锁也为大势所趋。现我司推出基于WTL580微波雷达的电子锁应用方案&#xff0c;通过检测门锁周围是有活动人体存在来激活门锁。我司WTL580微波雷达方案采用5.8GHz微米波雷达传感器…

C语言-第十章:预处理

传送门&#xff1a;C语言-综合案例&#xff1a;通讯录 目录 第一节&#xff1a;什么是预处理 第二节&#xff1a;#define 2-1.定义符号 2-2.给类型取别名 2-3.定义一段代码 2-4.定义宏 2-5.#define 的替换规则 2-6.宏中的# 2-7.宏中的## 2-8.#undef 移除一个宏定义 第三节&a…

武汉传媒学院联合创龙教仪建设DSP教学实验箱,基于DSP C6000平台搭建

1、院校简介 武汉传媒学院是中南地区唯一一所传媒类本科高校&#xff0c;也是湖北省“转型发展”首批试点高校 前身是2004年成立的华中师范大学武汉影视工程学院&#xff0c;2007年经教育部批准更名为华中师范大学武汉传媒学院&#xff0c;2016年&#xff0c;经教育部批准&…

漫谈设计模式 [10]:享元模式

引导性开场 菜鸟&#xff1a;老鸟&#xff0c;我最近在做一个游戏开发项目&#xff0c;发现内存占用特别大&#xff0c;尤其是一些重复对象&#xff0c;非常浪费资源。你有什么建议吗&#xff1f; 老鸟&#xff1a;这个问题很常见。你听说过设计模式中的“享元模式”吗&#…

HarmonyOS开发实战( Beta5.0)滑动视频自动播放案例实践

鸿蒙HarmonyOS开发往期文章必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 介绍 本示例主要介绍视频列表滑动到屏幕中间自动播放场景&…

电巢科技携Ecosmos元宇宙产品亮相第25届中国光博会

第25届中国国际光电博览会&#xff08;“CIOE中国光博会”&#xff09;今日在深圳国际会展中心盛大开幕。本届博览会以“光电引领未来&#xff0c;驱动应用创新”为主题&#xff0c;吸引了全球超过3700家优质光电企业参展&#xff0c;展示了光电产业的最新成果和前沿技术。 电…

Excel 基础知识-操作手册2

十、查找与引用函数 Excel中的查找与引用函数非常丰富&#xff0c;以下是一些主要的函数及其使用示例&#xff1a; 1. **VLOOKUP** - 语法&#xff1a;VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) - 示例&#xff1a;假设A列是员工编号&#xff0c;B…

YOLOv5植物识别系统

YOLOv5植物识别系统 项目描述 本项目旨在开发一个基于YOLOv5的植物识别系统&#xff0c;该系统能够通过图像识别技术自动检测和分类植物。项目使用YOLOv5作为核心检测模型&#xff0c;并结合Python编程语言&#xff0c;构建了一个高效、准确的植物识别工具。该系统不仅可以用于…