【Redis】 关于 Redis 集合类型

文章目录

  • 🍃前言
  • 🌳普通命令
    • 🚩sadd
    • 🚩smembers
    • 🚩sismember
    • 🚩scard
    • 🚩spop
    • 🚩smove
    • 🚩srem
  • 🌲集合间操作
    • 🚩sinter
    • 🚩sinterstore
    • 🚩sunion
    • 🚩sunionstore
    • 🚩sdiff
    • 🚩sdiffstore
  • 🎍集合类型的内部编码
  • 🍀集合类型的使用场景
  • ⭕总结

🍃前言

集合类型是用来保存多个字符串类型的元素的,但和列表类型是不同的,集合中

  1. 元素之间是⽆序的
  2. 元素不允许重复。

⼀个集合中最多可以存储 2^32 - 1 个元素。Redis 除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使⽤好集合类型,能在实际开发中解决很多问题

🌳普通命令

🚩sadd

将⼀个或者多个元素添加到 set 中。注意,重复的元素⽆法添加到 set 中。

语法:

sadd key member [member ...]

时间复杂度:

  • O(1)

返回值:

  • 本次添加成功的元素个数

在这里插入图片描述

🚩smembers

获取⼀个 set 中的所有元素,注意,元素间的顺序是⽆序的。

语法:

semembers key

时间复杂度:

  • O(N)

返回值:

  • 所有元素的列表。

在这里插入图片描述

🚩sismember

判断⼀个元素在不在 set 中。

语法:

sismember key member

时间复杂度:

  • O(1)

返回值:

  • 1 表⽰元素在 set 中。0 表⽰元素不在 set 中或者 key 不存在。

在这里插入图片描述

🚩scard

获取⼀个 set 的基数(cardinality),即 set 中的元素个数。

语法:

scard key

时间复杂度:

  • O(1)

返回值:

  • set 内的元素个数。

在这里插入图片描述

🚩spop

从 set 中删除并返回⼀个或者多个元素。注意,由于 set 内的元素是⽆序的,所以取出哪个元素实际是未定义⾏为,是随机的

语法:

spop key [count]

时间复杂度:

  • O(N), n 是 count

返回值:

  • 取出的元素。

在这里插入图片描述

🚩smove

将⼀个元素从源 set 取出并放⼊⽬标 set 中。

语法:

smove source destination member

时间复杂度:

  • O(1)

返回值:

  • 1 表⽰移动成功,0 表⽰失败

在这里插入图片描述

🚩srem

将指定的元素从 set 中删除。

语法:

srem key member [member ...]

时间复杂度:

  • O(N), N 是要删除的元素个数.

返回值:

  • 本次操作删除的元素个数。

在这里插入图片描述

🌲集合间操作

对于集合,我们有三种基本操作,分别为交集、并集、差集

🚩sinter

获取给定 set 的交集中的元素

语法:

sinter key [key ...]

时间复杂度:

  • O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.

返回值:

  • 交集的元素。

在这里插入图片描述

🚩sinterstore

获取给定 set 的交集中的元素并保存到⽬标 set 中。

语法:

sinterstore destination key [key ...]

时间复杂度:

  • O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.

返回值:

  • 交集的元素个数

在这里插入图片描述

🚩sunion

获取给定 set 的并集中的元素。

语法:

sunion key [key ...]

时间复杂度:

  • O(N), N 给定的所有集合的总的元素个数.

返回值:

  • 并集的元素

在这里插入图片描述

🚩sunionstore

获取给定 set 的并集中的元素并保存到⽬标 set 中。

语法:

sunionstore destination key [key ...]

时间复杂度:

  • O(N), N 给定的所有集合的总的元素个数.

返回值:

  • 并集的元素个数。
    在这里插入图片描述

🚩sdiff

获取给定 set 的差集中的元素

语法:

sdiff  key [key ...]

时间复杂度:

  • O(N), N 给定的所有集合的总的元素个数.

返回值:

  • 差集的元素

在这里插入图片描述

🚩sdiffstore

获取给定 set 的差集中的元素并保存到⽬标 set 中

语法:

sdiffstore destination key [key ...]

时间复杂度:

  • O(N), N 给定的所有集合的总的元素个数.

返回值:

  • 差集的元素个数

在这里插入图片描述

🎍集合类型的内部编码

集合类型的内部编码有两种:

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

🍀集合类型的使用场景

集合类型⽐较典型的使⽤场景是标签(tag)。

例如 A ⽤⼾对娱乐、体育板块⽐较感兴趣,B⽤⼾对历史、新闻⽐较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同⼀个标签的⼈,以及⽤⼾的共同喜好的标签,这些数据对于增强⽤⼾体验和⽤⼾黏度都⾮常有帮助。

例如⼀个电⼦商务⽹站会对不同标签的⽤⼾做不同的产品推荐

⭕总结

关于《【Redis】 关于 Redis 集合类型》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

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

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

相关文章

C# --- 浮点数类型 float, double, decimal

C# --- 浮点数类型 float, double, decimal float, double, decimaldecimal float, double, decimal decimal double 和 float 的采用base 2, 不能精确的表示浮点数, 进行加减乘除的操作的时候会出现精度丢失的问题decimal 采用base 10,可以精确的表示浮点数&#x…

客户体验:电子元器件商城配送满意度调查

背景介绍 电子元器件商城为了提升配送服务质量,决定开展配送满意度调查,以了解客户对配送服务的评价和意见。通过客户的反馈,商城将进一步优化配送流程,提高客户满意度,增强市场竞争力。 调查内容 配送时效性&#xf…

linux 之dma_buf (4)- mmap

一、前言 前面几篇都是在 kernel space 对 dma-buf 进行访问的,本篇我们将一起来学习,如何在 user space 访问 dma-buf。当然,user space 访问 dma-buf 也属于 CPU Access 的一种。 二、mmap 为了方便应用程序能直接在用户空间读写 dma-bu…

nbcio-vue升级迁移flowable到最新的jeeg-boot-vue3的问题记录(一)

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、vue3 jeeg-boot-vue3新版本的流程定义的页面,刷新出现下面问题,或第一次进去也一样 看着好像就一个警告的信息,不知道是什么原因引起的,应…

111.二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最小深度 2. 思路: 后序遍历(左右中&#xff…

【设计模式深度剖析】【5】【结构型】【桥接模式】| 以电视和遥控器为例加深理解

👈️上一篇:组合模式 设计模式-专栏👈️ 目 录 桥接模式(Bridge Pattern)定义英文原话是:直译理解 4个角色UML类图代码示例 应用优点缺点使用场景 示例解析:电视和遥控器UML类图 桥接模式(Bridge Pattern) 定义 英文原话是&am…

CC工具箱使用指南:【淹没区分析(BHM)】

一、简介 群友定制工具。 这个工具适用面比较小。 工具的应用场景如下: 提供一个淹没区范围,类型是面要素。统计这个范围内的一些线、面要素的面积或长度。 给定的几个数据有:耕地、永久基本农田、房台、道路(线)…

基于Docker搭建属于你的CC++集成编译环境

常常,我会幻想着拥有一个随时可以携带、随时可以使用的开发环境,那该是多么美好的事情。 在工作中,编译环境的复杂性常常让我头疼不已。稍有不慎,删除了一些关键文件,整个编译链就会瞬间崩溃。更糟糕的是,…

如何保养和维护气膜体育馆—轻空间

随着经济的飞速发展,气膜体育馆以其新颖的外观、优美的造型、节能环保的特点,迅速进入体育市场。然而,对于气膜体育馆的维护和保养是不容忽视的问题,必须引起重视。下面我们将详细介绍气膜体育馆的维护需要从哪些方面着手。 一、保…

【电路笔记】-状态可变滤波器

状态可变滤波器 文章目录 状态可变滤波器1、概述2、**状态可变滤波器电路**3、状态可变滤波器示例4、陷波滤波器设计5、总结状态可变滤波器是一种多反馈滤波器电路,可以从同一单个有源滤波器设计中同时产生所有三种滤波器响应:低通、高通和带通。 1、概述 状态可变滤波器使用…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 新闻资讯 的设计与实现

一.项目介绍 本系统分为 后端 和 小程序端 后端:点击登录按钮 设置个人中心、 管理员账号数据维护、 基础数据维护、 短视频信息维护(包括查看短视频留言、短视频收藏)、 论坛维护(增删改查帖子信息,包括查…

Rabbit MQ学习之《基础概念》

Message Queue 1 什么是MQ MQ(message queue),本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message而已,同时是一种跨进程的通信机制,用于上下游传递消息。 在互联网架构中,MQ 是一种非常常见的…

钡铼技术BL205模块在智能制造产线的灵活配置与优化

钡铼技术的OPC UA耦合器BL205模块在智能制造产线中的灵活配置与优化是当今工业领域中的一个关键议题。随着工业4.0和数字化转型的不断推进,生产线的灵活性和智能化程度成为了企业追求的目标。在这一背景下,BL205模块以其分布式、可插拔、结构紧凑、可编程…

Pytorch中的torch.save()文件保存格式探索以及mmdetection加载预训练模型参数对不齐和收到意外参数报错解决方案

使用mmdetection时遇到的问题比较多,首先要对自己要使用的预训练模型有一定的了解,并且懂得使用各种分类模型时不同的模型不同任务执行阶段需要参数上的对其。(比如mask-rcnn和它的三个头之间的参数)。 首先,谈谈torc…

Spring Boot集成六大常用中间件,附集成源码,亲测有效

目录 万字论文,从0到1,只需1小时获取途径1、Spring Boot如何集成Spring Data JPA?2、Spring Boot如何集成Spring Security?3、Spring Boot如何集成Redis?4、Spring Boot如何集成RabbitMQ?5、Spring Boot如何…

11 Goroutine-并发与并行、阻塞与非阻塞

并发 顺序执行:按照事先计划好的顺序,执行完一个操作后,再执行下一个操作。 顺序执行效率不高的原因: 每个操作由多个步骤组成,每个步骤所需要的时间长短不一,有些步骤可能相当耗时。顾客点菜需要时间&a…

VectorDBBench在windows的调试

VectorDBBench在windows的调试 VectorDBBench是一款向量数据库基准测试工具,支持milvus、Zilliz Cloud、Elastic Search、Qdrant Cloud、Weaviate Cloud 、 PgVector、PgVectorRS等,可以测试其QPS、时延、recall。 VectorDBBench是一款使用python编写的…

深度学习模型在OCR中的可解释性问题与提升探讨

摘要: 随着深度学习技术在光学字符识别(OCR)领域的广泛应用,人们对深度学习模型的可解释性问题日益关注。本文将探讨OCR中深度学习模型的可解释性概念及其作用,以及如何提高可解释性,使其在实际应用中更可…

Java 零基础入门学习(小白也能看懂!)

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

第16篇:JTAG UART IP应用<三>

Q:如何通过HAL API函数库访问JTAG UART? A:Quartus硬件工程以及Platform Designer系统也和第一个Nios II工程--Hello_World的Quartus硬件工程一样。 Nios II软件工程对应的C程序调用HAL API函数,如open用于打开和创建文件&#…