当前位置: 首页 > news >正文

redis:list列表命令和内部编码

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
  • 命令
    • LPUSH 和 LPUSHX
    • LRANGE
    • RPUSH 和 RPUSHX
    • LPOP 和 RPOP
    • LINDEX
    • LINSERT
    • LLEN
    • LREM
    • LTRIM
    • LSET
    • 阻塞版命令
      • BLPOP 和 BRPOP
  • 内部编码
  • 总结


前言

列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素;列表是一种灵活的数据结构,可以充当栈和队列。

下图为列表两端插入和弹出操作
在这里插入图片描述
下图为列表的获取和删除等操作
在这里插入图片描述
注意:
约定最左侧元素下标是0;
redis的下标支持负数下标;
list 并非是一个简单的数组,而是更接近于双端队列;

列表类型的特点:

  • 列表中的元素是有序的,有序表示元素的顺序很重要。相同元素不同顺序是不同的列表
  • 列表中的元素是允许重复的

命令

LPUSH 和 LPUSHX

将一个或者多个元素从左侧(头插)放入到list中

LPUSH key element [element … ]

返回值:插入后list的长度
时间复杂度:O(N),N为插入元素个数

在这里插入图片描述


在key存在时,将一个或者多个元素从左侧放入(头插)到list中。不存在,直接返回

LPUSHX key element [element … ]

返回值:插入后list的长度
时间复杂度:O(N),N为插入元素个数

在这里插入图片描述


注意:
如果key已经存在,并且key对应的value类型,不是list,此时lpush命令就会报错
在这里插入图片描述
redis 中所有的这些各种数据类型的操作,都是类似的效果


LRANGE

获取从 start 到 end 区间所有元素,左闭右闭。

LRANGE key start stop

返回值:指定区间的元素
时间复杂度:O(N)

在这里插入图片描述

redis并没有提供 rrange 命令


注意:
redis处理下标,是直接尽可能的获取到给定区间的元素;如果给定区间非法,比如超出下标就会尽可能的获取对应的内容。
在这里插入图片描述


RPUSH 和 RPUSHX

将一个或者多个元素从右侧放入(尾插)到list中

RPUSH key element [ element … ]

返回值:插入后list的长度
时间复杂度:O(N),N为插入元素个数

在这里插入图片描述


在 key 存在时,将一个或多个元素从右侧放入(尾插)到list中,不存在,直接返回

RPUSHX key element [ element … ]

返回值:插入后list的长度
时间复杂度:O(N),N为插入元素个数
在这里插入图片描述


LPOP 和 RPOP

从list左侧取出元素(头删)

LPOP key

返回值:取出的元素或者nil
时间复杂度:O(1)

在这里插入图片描述


从list右侧取出元素(尾删)

RPOP key

返回值:取出的元素或者nil
时间复杂度:O(1)

在这里插入图片描述


注意:
redis中的list是一个双端队列,从两头插入/删除元素都是O(1);搭配使用 rpush 和 lpop 就相当于 队列,搭配使用 rpush 和 rpop 就相当于 栈。


LINDEX

获取从左数第index位置的元素

LINDEX key index

返回值:取出的元素 或者 nil
时间复杂度:O(N),N为list的长度

在这里插入图片描述


LINSERT

在特定位置插入元素

LINSERT key < BEFORE | AFTER> pivot element

返回值:插入后的list长度
时间复杂度:O(N),N为list的长度

在这里插入图片描述


注意:
如果要插入的列表中,基准值存在多个,怎么办?insert进行插入时,要根据基准值,找到对应的位置。从左往右找,找到第一个符合基准值的位置即可。

在这里插入图片描述


LLEN

获取 list 长度

LLEN key

返回值:list的长度
时间复杂度:O(1)

在这里插入图片描述


LREM

移除list中指定数量的与给定值相等的元素

LREM key count value

返回值:被移除元素的数量
时间复杂度:O(N),N为list的长度

  • count > 0:从列表左侧开始,移除与 value 相等的最多 count个元素
  • count < 0:从列表尾部开始,移除与 value 相等的最多 count个元素
  • count = 0:移除列表中所有与value相等的元素

在这里插入图片描述


LTRIM

保留 start 和 stop 之间区间内的元素(区间两边的元素直接删除)

LTRIM key start stop

返回值:成功,返回“OK”
时间复杂度:O(N),N为被移除的元素数量
在这里插入图片描述


注意:
redis6 开始支持 ACL(access control list 访问控制列表),也就是权限。
redis由很多命令,acl把每个命令都打上标签,管理员就可以给每个redis用户配置不同的权限(允许 该用户 可以执行那些标签对应的命令)


LSET

将列表key中下标为index的元素的值设置为element

LSET key index element

返回值:成功,返回“OK”;失败,返回错误信息
时间复杂度:O(N),N为列表的长度
在这里插入图片描述


阻塞版命令

blpop 和 brpop 是 lpop 和 rpop 的阻塞版本。

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

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


BLPOP 和 BRPOP

BLPOP key [key …] timeout

BRPOP key [key …] timeout

如果这些list有任何一个非空,blpop都能够把这里的元素给获取到,立即返回;
如果这些list都为空,此时需要阻塞等待,等待其它客户端向这些list插入元素;
可以指定超时时间,单位是 秒 (redis 6 超时时间允许设定为小数;redis 5 超时时间要是整数)

brpop效果和blpop类似

  • 针对一个非空的列表进行操作
    在这里插入图片描述
    返回结果相当于一个pair(二元组),一方面告诉我们当前的数据来自哪个key,一方面告诉我们取到的数据是什么
  • 针对一个空的列表进行操作
    在这里插入图片描述
  • 针对多个key进行操作
    在这里插入图片描述

内部编码

之前list类型的内部编码实现有两种:

  • ziplist(压缩列表):当列表的元素个数小于 list-max-ziplist-entries 配置,同时列表中每个元素的长度都小于 list-max-ziplist-value 配置时,redis会选用ziplist来作为列表内部编码实现来减小内存消耗
  • linkedlist(链表):当列表类型无法满足ziplist的条件时,redis会使用linkedlist作为列表内部实现

现在list类型内部使用quicklist实现
quicklist是一个双向链表,但它的节点是压缩列表;每个quicklist节点都包含一个ziplist,ziplist中存储了list类型的数据元素。这种设计即保持了双向链表的插入和删除优势,又通过压缩列表提高了内存利用率

在这里插入图片描述


总结

以上就是我的redis学习笔记

在这里插入图片描述

相关文章:

redis:list列表命令和内部编码

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言命令LPUSH 和 LPUSHXLRANGERPUSH 和 RPUSHXLPOP 和 RPOPLINDEXLINSERTLLENLREMLTRIMLSET阻塞版命令BLPOP 和 BRPOP 内部编码总结 前言 列…...

.Net Core Configuration用法

//在应用程序的任何地方注入 IConfiguration 来访问配置数据。ASP.NET Core 默认会加载 appsettings.json 文件 IConfiguration _configuration builder.Configuration; string connectionString _configuration["ConnectionStrings:SqlServerConnection"]; Hel…...

分享一些企业选择管理顾问公司的成功经验

为了在激烈的市场竞争中脱颖而出&#xff0c;许多企业开始寻求外部专业力量的支持&#xff0c;其中&#xff0c;企业管理顾问公司以其专业的知识、丰富的经验和独到的见解&#xff0c;成为了众多企业的得力助手。本文将分享一些企业在选择企业管理顾问公司过程中的成功经验&…...

「Qt Widget中文示例指南」如何实现窗口嵌入?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文中的示例主要演…...

企业CRM选型必看:2024年最佳CRM系统排行

企业用户在选择CRM系统时&#xff0c;不仅要考虑系统的功能性、可定制性&#xff0c;还要考虑其与现有工具的集成能力以及价格。此外&#xff0c;在2024年&#xff0c;越来越多的企业用户会把CRM厂商的AI能力列入考察范畴。 本文分析整理2024年最佳CRM系统排行榜&#xff0c;从…...

SQL入门的基础知识

思考 无论是干任何语言或者其他方向的开发&#xff0c;都会和我们的SQL去进行打交道 总结 学习SQL的原因&#xff1a;后面的实战案例需要用SQL&#xff0c;SQL是开发人员的必备技能 现在只需要学到满足后续案例需要&#xff0c;即简单增删改查&#xff0c;做一个入门即可 1.…...

JS渗透(安全)

JS逆向 基本了解 作用域&#xff1a; 相关数据值 调用堆栈&#xff1a; 由下到上就是代码的执行顺序 常见分析调试流程&#xff1a; 1、代码全局搜索 2、文件流程断点 3、代码标签断点 4、XHR提交断点 某通js逆向结合burp插件jsEncrypter 申通快递会员中心-登录 查看登录包…...

淘宝扭蛋机小程序,功能优势分析

随着潮玩文化的影响&#xff0c;扭蛋机作为潮玩的鼻祖&#xff0c;又再次成为了大众的“宠儿”。扭蛋机通过与多种IP结合&#xff0c;创造出各种元素的商品&#xff0c;为大众带来娱乐、收藏的新方式。我国潮玩市场规模正在大幅度的增长&#xff0c;将达到千亿元&#xff0c;发…...

Redis 数据备份与恢复

Redis 数据备份与恢复 引言 Redis 作为一种高性能的键值存储数据库,在许多应用场景中扮演着重要的角色。然而,数据的安全性是任何数据库系统都需要关注的问题。为了确保数据的安全和完整性,定期进行数据备份和掌握恢复策略是至关重要的。本文将详细介绍 Redis 数据备份与恢…...

CentOS9 Stream 设置禁用IPV6

CentOS9 Stream 设置禁用IPV6 方法 1: 修改 sysctl 配置方法 2: 使用 NetworkManager方法 3: 禁用内核参数验证 IPv6 是否禁用 在 CentOS 9 Stream 中&#xff0c;您可以通过以下步骤禁用 IPv6&#xff1a; 方法 1: 修改 sysctl 配置 编辑 sysctl 配置文件&#xff1a; 打开 /…...

C语言 | Leetcode C语言题解之第530题二叉搜索树的最小绝对差

题目&#xff1a; 题解&#xff1a; void dfs(struct TreeNode* root, int* pre, int* ans) {if (root NULL) {return;}dfs(root->left, pre, ans);if (*pre -1) {*pre root->val;} else {*ans fmin(*ans, root->val - (*pre));*pre root->val;}dfs(root->…...

【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式

在现代分布式系统中&#xff0c;管理跨多个服务的长事务至关重要。传统的分布式事务解决方案往往面临性能瓶颈和复杂性问题&#xff0c;而 Saga 模式 作为一种灵活高效的解决方案&#xff0c;逐渐受到开发者的青睐。本文将探讨如何利用 Spring Boot 和 Kafka 实现 Saga 模式&am…...

蓝桥杯 python day01 第一题

1. 确定字符串是否包含唯一字符 确定字符串是否包含唯一字符 题目描述 实现一个算法来识别一个字符串的字符是否是唯一的&#xff08;忽略字母大小写&#xff09;。 若唯一&#xff0c;则输出YES&#xff0c;否则输出NO。 输入描述 输入一行字符串&#xff0c;长度不超过…...

10款好用的win10录屏软件带你体验专业录屏。

其实win10系统的设备上有自带的录屏功能&#xff0c;还有powerpoint里面也有录屏工具可以使用。如果有朋友觉得里面的功能并不能够满足自己的录屏需求的话&#xff0c;可以用专门的录屏软件来完成。比如我最近找到的这4款工具&#xff0c;录制的视频效果好&#xff0c;操作还方…...

2025浙江省考报名流程详细教程

2025年浙江省考报名马上就要开始了&#xff0c;有想要参加浙江省考的同学&#xff0c;可以提前看一下报名流程&#xff0c;和报名照要求。 报名时间&#xff1a;11月6日9时一11月11日17时 南核时间&#xff1a;11月6日9时一11月13日17时 缴费时间&#xff1a;11月14日9时一11月…...

unity3d——关于GetComponent<T>()

先看代码&#xff1a; TankBaseObj obj other.GetComponent<TankBaseObj>();if(obj ! null){//说明是坦克打到坦克 受伤处理 固定不会受伤 移动的会受伤obj.Wound(fatherObj);} TankBaseObj 是一个基类 wound是一个虚函数 子类已经重新实现 当你的游戏对象依附…...

Spring 框架中常见的注解(Spring、SpringMVC、SpringBoot)

1. Spring 中常见注解 还有Recourse&#xff1a;相当于AutowiredQualifier Value : 用于将配置文件中的值注入到Bean的字段中。 Bean : 用于在配置类中声明一个Bean。 Lazy : 用于延迟加载Bean。 2. SpringMVC 中常见注解 还有GetMapping PostMapping PutMapping DeleteMapp…...

Hms?: 1渗透测试

靶机&#xff1a;Hms?: 1 Hms?: 1 ~ VulnHub 攻击机&#xff1a;kail linux 2024 主机扫描阶段发现不了靶机&#xff0c;所以需要按DriftingBlues2一样手动配置网卡 1,将两台虚拟机网络连接都改为NAT模式&#xff0c;并查看靶机的MAC地址 2&#xff0c;攻击机上做主机扫描发现…...

1、Qt6 Quick 简介

一、Qt6 Quick 简介 1、Qt Quick简介 Qt Quick 是 Qt 6 中使用的用户界面技术的总称。它是在 Qt 4 中引入的&#xff0c;现在在 Qt 6 中进行了扩展。Qt Quick 本身是几种技术的集合&#xff1a; QML——用户界面标记语言JavaScript - 动态脚本语言Qt C - 高度可移植的增强型…...

大模型论文集-20241103

Investigating the catastrophic forgetting in multimodal large language models 研究问题 本文探讨了多模态大型语言模型&#xff08;MLLMs&#xff09;在学习新任务时的灾难性遗忘现象。研究者关注于在添加新数据集后&#xff0c;模型是否能够保留之前学到的知识而不忘记…...

GESP4级考试语法知识(计数排序-桶排序)

整数排列参考程序代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int main() {int a[101],n,i,j,k;memset(a,0,sizeof(a)); //数组清0cin>>n; //输入数字个数for(i1;i<n;i) {cin>>k; //输…...

红队-shodan搜索引擎篇

如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.shodan原理与功能的介绍 Shodan Search Engine 它是专门搜网络设备的,只要联网的,只要有IP地址的都可以称为网络设备 1.shodan&#x…...

SQL 数据结构查询

1&#xff1a;查询变得结构。 SELECT COLID,SO.NAME,EP.VALUE,SO.LENGTH,MIN(ST.NAME) AS TYPE FROM SYS.EXTENDED_PROPERTIES EP RIGHT JOIN SYS.SYSCOLUMNS SO ON MAJOR_IDID AND COLIDMINOR_ID LEFT JOIN SYS.SYSTYPES ST ON ST.XTYPESO…...

《高频电子线路》—— 角度调制(调相、调频)

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 目录 角度调制&#xff08;调相、调频&#xff09; 角度调制的原因 调频VS调幅 角度调制的分类 本章重难点 调相 时域&#xff0…...

危机来临前---- 力扣: 876

危机即将来临 – 链表的中间节点 描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例&#xff1a; 何解&#xff1f; 1、遍历找到中间节点 &#xff1a; 这个之在回文链表中找…...

langchain调用chatgpt对文本进行编码

1.导包 from langchain_openai import OpenAIEmbeddings2.加载编码器 embeddings_model OpenAIEmbeddings(model"text-embedding-3-large",base_url"https://api.chatanywhere.tech/v1")3.编码 embeded_result embeddings_model.embed_documents([&qu…...

python manage.py

自定义命令python manage.py 文件夹建立&#xff1a;(Python Package)这个形式的包&#xff0c;里面会自动加载__init__.py文件 1.新建management文件夹(文件必须加载在新建APP下&#xff0c;不能建在初始APP下) 2.在里面创建名为&#xff1a;commands的文件夹 3.在其下创建名…...

qt QDoubleSpinBox详解

1、概述 QDoubleSpinBox是Qt框架中的一个控件&#xff0c;专门用于浮点数&#xff08;即小数&#xff09;的输入和调节。它提供了一个用户界面元素&#xff0c;允许用户在预设的范围内通过拖动滑块、点击箭头或使用键盘来递增或递减浮点数值。QDoubleSpinBox通常用于需要精确数…...

RK3229 Android9自定义一个按键实现长按短按

一、kernel修改 --- a/arch/arm/boot/dts/rk3229-evb-android.dtsib/arch/arm/boot/dts/rk3229-evb-android.dtsi-18,26 18,25 };gpio_keys {status "okay";compatible "gpio-keys";#address-cells <1>;#size-cells <0>;autorepeat;pinct…...

A*算法求第k短路

话不多说先上例题。。 acwing&#xff1a;178. 第K短路 给定一张 NN 个点&#xff08;编号 1,2…N1,2…N&#xff09;&#xff0c;MM 条边的有向图&#xff0c;求从起点 SS 到终点 TT 的第 KK 短路的长度&#xff0c;路径允许重复经过点或边。 注意&#xff1a; 每条最短路中至…...