【Redis入门到精通三】Redis核心数据类型(List,Set)详解

目录

 

Redis数据类型

​编辑

1.List类型

(1)常见命令

(2)内部编码

2.Set类型

(1)常见命令

(2)内部编码


 

Redis数据类型

         查阅Redis官方文档可知,Redis提供给用户的核心数据类型有以下九个,从上到下依次是字符串,哈希,列表,集合,有序集合,流,位图,位域,地址空间。因为Redis本身就是通过键值对的方式存储数据,这些数据类型都存在于Redis的value中 ,不同的数据类型,所需要的插入命令也不相同。下面我将依据官方文档对这九种数据类型依次进行介绍,本篇文章将着重对List,Set两种数据类型进行介绍。

5e7507231a354fe18f1df6d7f93e8414.png

1.List类型

         List类型是用来存储多个有序的字符串(需要注意此处的有序指的是插入先后顺序,并不是大小)。在 Redis 中,可以对列表两端插⼊(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等。

(1)常见命令

操作List类型的常用命令有:lpush,lpushx,rpush,rpushx,lrange,lpop,rpop,lindex,linsert,llen,blpop,brpop。下面将按顺序依次介绍用法。

操作类型命令时间复杂度
添加
rpush key value [value ...]
O(k),k 是元素个数
lpush key value [value ...]
O(k),k 是元素个数
linsert key before | after pivot value
O(n),n 是 pivot 距离头尾的距离
查找
lrange key start end
O(s+n),s 是 start 偏移量,n 是 start 到 end 的范围
lindex key index
O(n),n 是索引的偏移量
llen key
O(1)
删除
lpop key
O(1)
rpop key
O(1)
lremkey count value
O(k),k 是元素个数
ltrim key start end
O(k),k 是元素个数
修改
lset key index value
O(n),n 是索引的偏移量
阻塞操作
blpop brpop
O(1)
LPUSH key element [element ...]

 lpush命令用于将一个或多个元素从左侧插入。

LPUSHX key element [element ...]

lpushx命令用于当key存在时,将元素从左侧插入,不存在则直接返回。 

RPUSH key element [element ...]

rpush命令用于将一个或多个元素从右侧(尾部)插入。 

RPUSHX key element [element ...]

 rpushx命令用于当key存在时,讲一个或者多个元素从右侧插入。

LRANGE key start stop

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

LPOP key

 lpop用于从list左侧取出元素(头删)。

RPOP key

rpop用于从list右侧取出元素(尾删) 。

LINDEX key index

 lindex用于获取从左数第indedx位置的元素。

LINSERT key <BEFORE | AFTER> pivot element

 linsert用于在特定位置前或后插入元素。

LLEN key

llen用于获取list长度 。

BLPOP key [key ...] timeout

 blpop是lpop的阻塞版本,当所有key对应的列表都为为空时执行该命令的客户端将会阻塞,直到某个列表被其他客户端插入元素,或者设置的timeout时间到。

 BRPOP key [key ...] timeout

 brpop是rpop的阻塞版本,具体机制参考上面的blpop。

(2)内部编码

        List类型在内存中存储时的内部编码有ziplist,linkedlist两种方式。Redis会根据当前值的类型和长度动态决定使用哪种内部编码实现,可以通过object encoding key 命令来查看编码方式。

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

2.Set类型

集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中元素之间是⽆序的,元素不允许重复。Redis 除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使⽤好集合类型,能在实际开发中解决很多问题。

(1)常见命令

操作Set类型的常用命令有:sadd,smembers,sismember,scard,spop,smove,srem,sinter,sinterstore,sunion,sunionstore,sdiff,sdiffstore。下面将按顺序依次介绍用法。

SADD key member [member ...]

时间复杂度O(1),sadd用于将一个或者多个元素添加到set中,重复的元素无法添加到set中。 

SMEMBERS key

 时间复杂度O(N),smembers用于获取一个set中的所有元素,元素间的顺序是无序的。

SISMEMBER key member

时间复杂度O(1), sismember用于判断一个元素在不在set中。

 SCARD key

 时间复杂度O(1),scard用于获取set的元素个数。

SPOP key [count]

时间复杂度O(N),spop用于从set中删除并返回一个或多个元素。 

SMOVE source destination member

 时间复杂度O(1),smove用于将一个元素从源set取出并放入目标set中。

SREM key member [member ...]

 时间复杂度O(N),srem用于将指定的元素从set中删除。

SINTER key [key ...]

时间复杂度O(N*M)N 是最⼩的集合元素个数. M 是最⼤的集合元素个数, sinter用于获取给定set的交集中的元素。

 SINTERSTORE destination key [key ...]

时间复杂度O(N*M)N 是最⼩的集合元素个数. M 是最⼤的集合元素个数, sinterstore用于获取给定set的交集中的元素并保存在目标set中。

SUNION key [key ...]

时间复杂度O(N)N 给定的所有集合的总的元素个数, sunion用于获取给定set的并集中的元素。

SUNIONSTORE destination key [key ...]

时间复杂度O(N), sunionstore用于获取给定set的并集中的元素并保存在目标set中。

SDIFF key [key ...]

 时间复杂度O(N)N 给定的所有集合的总的元素个数,sdiff用于获取指定set的差集中的元素。

SDIFFSTORE destination key [key ...]

时间复杂度O(N),sdiffstore用于取给定set的并集中的元素并保存在目标set中。

(2)内部编码

集合类型在内存中存储时的内部编码方式有inset,hashtable两种方式。Redis会根据当前值的类型和长度动态决定使用哪种内部编码实现,可以通过object encoding key 命令来查看编码方式。

  • intset(整数集合):当集合中的元素都是整数并且元素的个数⼩于 set-max-intset-entries 配置(默认 512 个)时,Redis 会选⽤ intset 来作为集合的内部实现,从⽽减少内存的使⽤。
  • hashtable(哈希表):当集合类型⽆法满⾜ intset 的条件时,Redis 会使⽤ hashtable 作为集合的内部实现。

❤️😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍

🍔我是小皮侠,谢谢大家都能看到这里!!

🦚主页已更新Java基础内容,数据结构基础,数据库,算法

🚕未来会更新Java项目,SpringBoot,Redis以及各种Java路线会用到的技术。

🎃求点赞!求收藏!求评论!求关注!

🤷‍♀️谢谢大家!!!!!!!

 

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

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

相关文章

JavaScript - Document文档操作

1. 前言 ​​​​​​​ 编写网页时&#xff0c;我们需要时刻操作文档进而完成我们想要的效果。这就是通过文档对象模型实现&#xff0c;使用Document对象控制HTML以及样式信息的API 2. Document的树结构 在了解Document文档对象模型之前&#xff0c;我们先了解Dom的树结构 …

使用scp命令从本地往服务器传输文件失败

解决办法&#xff1a; 找到这个文件&#xff0c;打开&#xff0c;将里面的服务器ip对应的一行数据删掉即可。

(c语言+数据结构链表)项目:贪吃蛇

目录 1.项目背景 2.游戏效果演⽰ 3. ⽬标 4. 技术要点 5. Win32 API介绍 5.1 Win32 API 5.2 控制台程序 5.3 控制台屏幕上的坐标COORD 5.4 GetStdHandle 5.5 GetConsoleCursorInfo 5.5.1 CONSOLE_CURSOR_INFO 5.6 SetConsoleCursorInfo 5.7 SetConsoleCursorPositi…

d3dcompiler47dll丢失怎么解决,详细介绍6种解决方案

在电脑使用过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中之一就是系统提示某个文件缺失。其中&#xff0c;d3dcompiler_47.dll是许多用户经常遇到的问题之一。这个文件是DirectX组件的一部分&#xff0c;如果缺失&#xff0c;可能会导致游戏或应用程序无法正常运行…

Qt/C++ 多线程同步机制详解及应用

在多线程编程中&#xff0c;线程之间共享资源可能会导致数据竞争和不一致的问题。因此&#xff0c;采用同步机制确保线程安全至关重要。在Qt/C中&#xff0c;常见的同步机制有&#xff1a;互斥锁&#xff08;QMutex、std::mutex&#xff09;、信号量&#xff08;QSemaphore&…

Ansbile-变量

文章目录 一、Ansible的常量&#xff08;内置的变量&#xff09;有哪些&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1…

vulnhub(11):derpnstink(hydra爆破用户名和密码、验证的文件上传)

端口 nmap主机发现 nmap -sn 192.168.159.120/24 ​ Nmap scan report for 192.168.159.120 Host is up (0.00020s latency). ​ 120是新出现的机器&#xff0c;他就是靶机 nmap端口扫描 nmap -Pn 192.168.159.120 -p- --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nma…

【论文笔记】Are Large Kernels Better Teacheres than Transformers for ConvNets

Abstract 本文提出蒸馏中小核ConvNet做学生时&#xff0c;与Transformer相比&#xff0c;大核ConvNet因其高效的卷积操作和紧凑的权重共享&#xff0c;使得其做教师效果更好&#xff0c;更适合资源受限的应用。 用蒸馏从Transformers蒸到小核ConvNet的效果并不好&#xff0c;原…

图的应用(关键路径)

基于你设计的带权有向无环图&#xff0c;写出所有合法的关键路径&#xff0c;并算出关键路径总长度 文字描述&#xff1a;关键路径总长度的现实意义是什么&#xff1f; 1.关键路径 总长度454316 2.现实意义 从源点到汇点的所有路径中&#xff0c;具有最大路径长度的路径称…

好的头戴式降噪耳机一定很贵吗?四款热门头戴耳机盘点及推荐!

在快节奏的现代生活中&#xff0c;噪音无处不在&#xff0c;它常常干扰着我们的工作、学习与休闲时光。而一款高性价比的降噪蓝牙耳机&#xff0c;就如同一个贴心的伙伴&#xff0c;能为我们营造出一片宁静的听觉空间。如今&#xff0c;耳机市场蓬勃发展&#xff0c;想要好的头…

Broadcast:Android中实现组件及进程间通信

目录 一&#xff0c;Broadcast和BroadcastReceiver 1&#xff0c;简介 2&#xff0c;广播使用 二&#xff0c;静态注册和动态注册 三&#xff0c;无序广播和有序广播 1&#xff0c;有序广播的使用 2&#xff0c;有序广播的截断 3&#xff0c;有序广播的信息传递 四&am…

如何在GitHub上克隆仓库:HTTPS、SSH和GitHub CLI的区别

GitHub是开发者的天堂&#xff0c;提供了丰富的工具和功能来管理代码和项目。在克隆GitHub仓库时&#xff0c;你可能会遇到三种常见的方法&#xff1a;HTTPS、SSH和GitHub CLI。每种方法都有其独特的优势和适用场景。本文将深入探讨这三种克隆方式的区别&#xff0c;帮助你选择…

C++--类的实例化

一、实例化的概念 用类类型在屋里内存中创建对象的过程&#xff0c;称为类实例化出对象 类是对对象进行一种抽象描述&#xff0c;是一个模型一样的东西&#xff0c;限定了类有哪些成员变量&#xff0c;这些成员变量只是声明&#xff0c;没有分配空间&#xff0c;用类实例化出…

java项目之编程训练系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 编程训练系统的主要使用者管…

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)

文章目录 前言一、ArkTS基本介绍1、 ArkTS组成2、组件参数和属性2.1、区分参数和属性的含义2.2、父子组件嵌套 二、装饰器语法1.State2.Prop3.Link4.Watch5.Provide和Consume6.Observed和ObjectLink代码示例&#xff1a;示例1&#xff1a;&#xff08;不使用Observed和ObjectLi…

未来通信抢先看!遨游通讯2024年中国国际信息通信展亮点剧透

2024年中国国际信息通信展览会将于9月25日-27日在北京国家会议中心举行&#xff0c;本届展会以“推动数实深度融合&#xff0c;共筑新质生产力”为主题。在通信技术日新月异的今天&#xff0c;卫星通信、人工智能、低碳节能等技术理念正引领着通信行业迈向新的高度。遨游通讯作…

【漏洞复现】Casbin casdoor static 任意文件读取漏洞

漏洞描述 Casdoor 是 Casbin 开源社区推出的基于 OAuth 2.0 / OIDC 的中心化的单点登录(SSO)身份验证平台。 Casdoor static 存在任意文件读取漏洞,攻击者通过发送特殊的请求包可以获取服务器中的敏感文件。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵…

Linux C# DAY3

作业 1、 #!/bin/bash mkdir -p ~/dir/dir1 mkdir ~/dir/dir2 cp ./* ~/dir/dir1 cp ./*.sh ~/dir/dir2 cd ~/dir/ tar -cvJf dir2.tar.xz ./dir2 mv dir2.tar.xz ~/dir/dir1/ cd ~/dir/dir1/ tar -xvf dir2.tar.xz 2、 #!/bin/bash head -5 /etc/group | tail -1 sudo mkdi…

CORS漏洞及其防御措施:保护Web应用免受攻击

1. 背景- 什么是CORS&#xff1f; 在当今互联网时代&#xff0c;Web 应用程序的架构日益复杂。一个后端服务可能对应一个前端&#xff0c;也可能与多个前端进行交互。跨站资源共享&#xff08;CORS&#xff09;机制在这种复杂的架构中起着关键作用&#xff0c;但如果配置不当&…

Redis Key的过期策略

Redis 的过期策略主要是指管理和删除那些设定了过期时间的键&#xff0c;以确保内存的有效使用和数据的及时清理。 具体来说&#xff0c;Redis 有三种主要的过期策略&#xff1a;定期删除&#xff08;Scheduled Deletion&#xff09;、惰性删除&#xff08;Lazy Deletion&#…