【Redis】redis5种数据类型(list)

news2024/12/30 3:18:23

目录

基本介绍

命令

LPUSH

LPUSHX

RPUSH

RPUSHX

LRANGE

LPOP

RPOP

LINDEX

LINSERT

LLEN

LREM

LTRIM

LSET

阻塞版本的命令

BLPOP

内部编码


基本介绍

list相当于c++的双端队列deque

区分获取和删除的区别

  1. lindex能获取到元素的值
  2. lrem也能返回被删除元素的值 

命令

LPUSH

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

语法:

LPUSH key element [element...]

时间复杂度:O(k),k是元素个数

返回值:插入后list的长度 。

如果key已经存在,并且key对应的value类型,不是list,此时lpush命令就要报错

LPUSHX

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

语法:

LPUSHX key element [element...]

时间复杂度:O(1)

返回值:插入后list的长度 。

RPUSH

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

语法:

RPUSH key element [element...]

时间复杂度:O(k),k是元素个数

返回值:插入后list的长度

RPUSHX

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

语法:

RPUSHX key element [element...]

时间复杂度:O(1)

返回值:插入后list的长度 。

LRANGE

查看list中指定范围的元素

语法:

LRANGE key start stop //此处的区间是闭区间

时间复杂度:O(s+n),s是start的偏移量,n是start到stop

返回值:指定区间元素

LPOP

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

语法:

 LPOP key

时间复杂度:O(1)

返回值:取出的元素或者nil

RPOP

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

语法:

RPOP key

时间复杂度:O(1)

返回值:取出的元素或者nil

LINDEX

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

语法:

LINDEX key index

时间复杂度:O(N),N是索引的偏移量

返回值:取出的元素或者nil(下标非法返回nil)

LINSERT

在特定位置插入元素

语法:

 LINSERT key <BEFORE | AFTER> pivot element

  • <BEFORE | AFTER> 插入指定位置之前还是之后
  • pivot 插入位置的基准值
  • element 插入的值
  • linsert进行插入的时候,要根据基准值,找到对应的位置,从左往右找,找到第一个符合基准值的即可

时间复杂度:O(N),N是pivot距离头尾的距离

返回值:插入后list的长度

LLEN

获取list长度

语法:

LLEN key

时间复杂度:O(1)

返回值:list的长度,不存在的key返回0

LREM

语法:

LREM key count element

  • count 要删除的个数
  • element 要删除的值
  • count是正数从左开始找,负数是从右开始找,0代表符合删除的值的全删除

时间复杂度:O(N+M),N列表长度,M删除元素个数

返回值:删除的个数

LTRIM

语法:

LTRIM key start stop

  • 保留start和stop之间区间内的元素(区间外面两边的元素就直接被删除了)

LSET

根据下标修改元素

语法:

LSET key index element

  • index越界报错

时间复杂度:O(N),N索引的偏移量

阻塞版本的命令

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

  • 在列表有元素的情况下,阻塞和非阻塞的表现是一致的,但如果列表中没有元素,非阻塞版本会立即返回nil;但阻塞版本会根据timeout,阻塞一段时间,期间redis可以执行其他命令,但要求执行该命令的客户端会表现为阻塞状态。
  • 使用brpop和blpop的时候,这里是可以显式设置阻塞时间的。
  • blpop和brpop都是可以同时去获取多个key的列表的元素的,多个key对应多个list,这多个list哪个有元素了,就返回哪个元素。
  • 如果多个客户端同时对一个键执行pop,先执行命令的客户端会得到弹出的元素。

brpop的用法与效果与blpop类似,这里只介绍blpop

BLPOP

LPOP的阻塞版本

语法:

BLPOP key [key ...] timeout

  • timeout单位是秒

时间复杂度:O(1)。

返回值:当针对一个非空的列表进行操作,返回的结果相当于一个pair,一方面告诉我们当前的数据来自哪个key,另一方面告诉我们取到的数据是啥。若列表为空等待timeout秒,若超过timeout的时间,则返回nil。

内部编码

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

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

上面两种编码方式是旧版本的实现方式,现在一般使用quikelist,quikelist相当于链表和压缩列表的结合,整体还是一个链表,链表的每个元素是压缩列表,每个压缩列表都不让它太大(通过list-max-ziplist-size来配置)

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

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

相关文章

一条SQL实现GPT大模型【完全看不懂】

用一条SQL实现GPT大模型&#xff0c;简直让人不可思议&#xff0c;但是俄罗斯一位名叫Quassnoi的SQL牛人做到了&#xff0c;Quassnoi每年只写一条SQL&#xff0c;但是每条SQL都非常复杂&#xff1a; 2021年&#xff0c;用SQL绘制新冠病毒的3D图片 2022年&#xff0c;用SQL模拟…

为何初创数字影像企业纷纷选择入驻孵化基地?

在当今数字化时代&#xff0c;数字影像行业正蓬勃发展&#xff0c;越来越多的初创数字影像企业如雨后春笋般涌现。而这些充满活力与创新的初创企业&#xff0c;为何纷纷选择入驻数字影像企业孵化基地呢&#xff1f; 首先&#xff0c;数字影像企业孵化基地为初创数字影像企业提供…

再次进阶 舞台王者 第八季完美童模全球赛形象大使【邱玳莹】赛场秀场超燃合集!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少女——邱玳莹&#xff0c;迎来了她舞台生涯的璀璨时刻。 形象大使——邱玳莹&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&am…

基于图像级监督和自训练的跨模态肿瘤分割转换器模型|文献速递--Transformer架构在医学影像分析中的应用

Title 题目 Image-level supervision and self-training for transformer-basedcross-modality tumor segmentation 基于图像级监督和自训练的跨模态肿瘤分割转换器模型。 01 文献速递介绍 深度学习在各种医学图像分析应用中展现了出色的性能和潜力&#xff08;Chen等&…

C语言 12 函数

其实函数在一开始就在使用了&#xff1a; // 这就是定义函数 int main() { ... }程序的入口点就是main函数&#xff0c;只需要将程序代码编写到主函数中就可以运行了&#xff0c;不过这个函数只是由我们来定义&#xff0c;而不是我们来调用。 当然&#xff0c;除了主函数之…

SMT | Kriging代理模型原理及应用

前言 代理模型工具箱 (surrogate modeling toolbox, SMT) 是一个基于Python开发的第三方包&#xff0c;其中包含代理模型方法、采样技术和基准测试函数。有关SMT的详细介绍参见&#xff1a; SMT | 代理模型Python工具包推荐 SMT可实现几个与高斯过程回归相关的代理模型&#x…

串口输出时:英文正常输出、中文乱码输出

一、问题&#xff1a;英文正常输出&#xff0c;英文乱码输出 二、解决方法 1、查看自己使用的串口助手的编码格式 2、查看自己使用输出的文件编码格式 以记事本的格式查看&#xff0c;原则上这两种应该保持相同&#xff0c;如果不相同&#xff0c;就需要把这个文件去另保存一…

图像与文本并存,多模态检索如何带来新的搜索革命

01 火热的多模态智能 回顾到2024的大型语言模型&#xff08;LLM&#xff09;的发展&#xff0c;让人欣喜的一点是scaling law依然奏效&#xff0c;智能随着资源的提高继续提高。但另一个让人担忧的点是高质量的文本语料似乎即将触及上限。为了加入更多的数据喂给模型&#xff0…

体育场座位【python实现】

题目来自此处 def main():seats list(map(int,input().split()))count 0for i in range(len(seats)):if seats[i] 0:if (i 0 or seats[i-1] 0) and(i len(seats)-1 or seats[i1] 0):count 1seats[i] 1print(seats)print(count) if __name__ "__main__":mai…

Win11 eNSP安装

前言 新买的电脑&#xff0c;安装eNSP总会遇到一些问题。如果你之前就是做网络安全而现在需要安装eNSP&#xff0c;你可能会因为安装过Wireshark导致一些问题。所以这里就为大家综合一篇文章&#xff0c;修复一些简单的问题。 下载地址&#xff1a;https://pan.baidu.com/s/17p…

Shell:初识sed、awk

Linux系统提供了两个常见的具备上述功能的工具。本节将会介绍Linux世界中最广泛使用的 两个命令行编辑器:sed和gawk。 1. sed编辑器 sed编辑器被称作流编辑器(stream editor)&#xff0c;流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可…

会做“减法”的项目经理,在工作中赢麻了!

都说我们在生活中要学会“断舍离”&#xff0c;其实工作中的一些事项、流程&#xff0c;也可以尽量精简&#xff01;对于项目经理来说也是如此&#xff0c;每天会议很多、需求不断&#xff0c;要适当做好“减法”&#xff0c;才能更好朝着目标方向前进&#xff01; 01、什么是做…

Linux 添加新用户之adduser 和 useradd 的区别 | 添加用户到 sudo 组【笔记型博文】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 ❤️ 创建新用户adduser 用法【推荐】useradd 用法 安装 sudo添加用户到 sudo 用…

Transformer学习(1):注意力机制

文章目录 什么是注意力如何实现注意注意力的计算过程总结 什么是注意力 在一张图像中&#xff0c;包含了各种信息&#xff0c;而我们会自动关注重要的信息。下图是注意力热力图&#xff0c;可以发现人们会注意兔子的脸这些重要信息。 而在深度学习中&#xff0c;输入数据包含…

Selenium自动化 Web 浏览器操作

文章目录 Selenium自动化 Web 浏览器操作Selenium简介安装Selenium安装WebDriver使用问题驱动加载报错版本不匹配 常用API创建实例定位元素鼠标事件表单相关多窗口切换等待显示等待隐式等待 文件上传下载经验总结 Selenium自动化 Web 浏览器操作 Selenium简介 Selenium可以模…

Bio-Linux-shell详解-1-从0开始

21世纪是数据的世纪&#xff0c;蓬勃发展的生物学积累了大量的数据&#xff0c;急需计算生物学、生物信息学及系统生物学等交叉学科大放异彩&#xff0c;而windows作为我们最熟悉的操作平台&#xff0c;并不能承担如此巨大的工作量&#xff0c;课题组的服务器因此承担了这个责任…

玩崩坏星穹铁道手机配置低、卡顿发烫、内存不足 GameViewer远程助你手机畅玩星铁PC端

9月10日&#xff0c;《崩坏&#xff1a;星穹铁道》迎来2.5版本「碧羽飞黄射天狼」&#xff01;不知道大家有没有抽到 飞霄&#xff1f;这次崩铁还为我们送了10连和 1000星琼 &#xff0c;上半卡池还有五星角色飞霄、知更鸟、卡芙卡、黑天鹅这四位角色&#xff0c;深受大家喜爱。…

Redis常用操作及springboot整合redis

1. Redis和Mysql的区别 数据模型&#xff1a;二者都是数据库,但是不同的是mysql是进行存储到磁盘当中,而Redis是进行存储到内存中. 数据模型 : mysql的存储的形式是二维表而Redis是通过key-value键值对的形式进行存储数据. 实际的应用的场景: Redis适合于需要快速读写的场景&…

在Word中,用VBA比较两段文本的相似度

效果1: 去掉字符串中回车&#xff0c;进行改进后效果&#xff1a; 代码&#xff1a; Function LevenshteinDistance(s As String, t As String) As IntegerDim d() As IntegerDim i As IntegerDim j As IntegerDim cost As IntegerDim sLen As IntegerDim tLen As IntegersLen…

nginx实现https安全访问的详细配置过程

文章目录 前言什么是 HTTP&#xff1f;什么是 HTTPS&#xff1f;HTTP 和 HTTPS 的区别为什么 HTTPS 被称为安全的&#xff1f;配置过程配置自签名证书 前言 首先我们来简单了解一下什么是http和https以及他们的区别所在. 什么是 HTTP&#xff1f; HTTP&#xff0c;全称为“超…