[Redis][Set]详细讲解

目录

  • 0.前言
  • 1.常用命令
    • 1.SADD
    • 2.SMEMBERS
    • 3.SISMEMBER
    • 4.SCARD
    • 5.SPOP
    • 6.SMOVE
    • 7.SREM
  • 2.集合间操作
    • 0.是什么?
    • 1.SINTER
    • 2.SINTERSTORE
    • 3.SUNION
    • 4.SUNIONSTORE
    • 5.SDIFF
    • 6.SDIFFSTORE
  • 3.内部编码
    • 1.intset(整数集合)
    • 2.hashtable(哈希表)
  • 4.使用场景


0.前言

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

    • 集合中元素之间是⽆序的
    • 集合中元素不允许重复
      请添加图片描述
  • 一个集合中最多可以存储 2 32 − 1 2^{32} - 1 2321个元素

  • Redis除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使⽤好集合类型,能在实际开发中解决很多问题


1.常用命令

1.SADD

  • 功能:将⼀个或者多个元素添加到set
    • 注意:重复的元素⽆法添加到set
  • 语法SADD key member [member ...]
  • 返回值:本次添加成功的元素个数
  • 时间复杂度 O ( 1 ) O(1) O(1)

2.SMEMBERS

  • 功能:获取一个set中的所有元素
    • 注意:元素间的顺序是无序的
  • 语法SMEMBERS key
  • 返回值:所有元素的列表
  • 时间复杂度 O ( N ) O(N) O(N)

3.SISMEMBER

  • 功能:判断一个元素在不在set
  • 语法SISMEMBER key member
  • 返回值::
    • 1:表⽰元素在set
    • 0:表⽰元素不在set中或者key不存在
  • 时间复杂度 O ( 1 ) O(1) O(1)

4.SCARD

  • 功能:获取一个set的基数(cardinality),即set中的元素个数
  • 语法SCARD key
  • 返回值set内的元素个数
  • 时间复杂度 O ( 1 ) O(1) O(1)

5.SPOP

  • 功能:从set中删除并返回⼀个或者多个元素
    • 注意:由于set内的元素是⽆序的,所以取出哪个元素实际是未定义⾏为,即可以看作随机的
  • 语法SPOP key [count]
  • 返回值:取出的元素
  • 时间复杂度 O ( N ) O(N) O(N),N是count

6.SMOVE

  • 功能:将一个元素从源set取出并放入目标set
  • 语法SMOVE src dest member
  • 返回值:1表示移动成功,0表示失败
  • 时间复杂度 O ( 1 ) O(1) O(1)

7.SREM

  • 功能:将指定的元素从set中删除
  • 语法SREM key member [member ...]
  • 返回值:本次操作删除的元素个数
  • 时间复杂度 O ( N ) O(N) O(N),N是要删除的元素个数

2.集合间操作

0.是什么?

  • set支持交集(inter)、并集(union)、差集(diff)
    请添加图片描述

1.SINTER

  • 功能:获取给定set的交集中的元素
  • 语法SINTER key [key ...]
  • 返回值:交集的元素
  • 时间复杂度 O ( N ∗ M ) O(N*M) O(NM),N是最⼩的集合元素个数,M是最⼤的集合元素个数

2.SINTERSTORE

  • 功能:获取给定set的交集中的元素并保存到目标set
  • 语法:`SINTERSTORE dest key [key …]
  • 返回值:交集的元素个数
  • 时间复杂度 O ( N ∗ M ) O(N*M) O(NM),N是最⼩的集合元素个数,M是最⼤的集合元素个数

3.SUNION

  • 功能:获取给定set的并集中的元素
  • 语法SUNION key [key ...]
  • 返回值:并集的元素
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

4.SUNIONSTORE

  • 功能:获取给定set的并集中的元素并保存到⽬标set
  • 语法SUNIONSTORE dest key [key ...]
  • 返回值:并集的元素个数
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

5.SDIFF

  • 功能:获取给定set的差集中的元素
  • 语法SDIFF key [key ...]
  • 返回值:差集的元素
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

6.SDIFFSTORE

  • 功能:获取给定set的差集中的元素并保存到目标set
  • 语法SDIFFSTORE dest key [key ...]
  • 返回值:差集的元素个数
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

3.内部编码

1.intset(整数集合)

  • 当集合中的元素都是整数并且元素的个数⼩于set-max-intset-entries配置(默认512个)时,Redis会选⽤intset来作为集合的内部实现,从⽽减少内存的使⽤

2.hashtable(哈希表)

  • 当集合类型⽆法满⾜intset的条件时,Redis会使⽤hashtable作为集合的内部实现

4.使用场景

  • 集合类型⽐较典型的使⽤场景是标签(tag)
    • 例如:⼀个电⼦商务⽹站会对不同标签的⽤⼾做不同的产品推荐
  • 示例
    • 给用户添加标签
      sadd user:1:tags tag1 tag2 tag5
      sadd user:2:tags tag2 tag3 tag5
      ...
      sadd user:k:tags tag1 tag2 tag4
      
    • 给标签添加用户
      sadd tag1:users user:1 user:3
      sadd tag2:users user:1 user:2 user:3
      ...
      sadd tagk:users user:1 user:4 user:9 user:28
      
    • 删除用户下的标签
      srem user:1:tags tag1 tag5
      ...
      
    • 删除标签下的用户
      srem tag1:users user:1
      srem tag5:users user:1
      ...
      
    • 计算⽤⼾的共同兴趣标签
      sinter user:1:tags user:2:tags
      

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

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

相关文章

ReKep——李飞飞团队提出的让机器人具备空间智能:基于视觉语言模型GPT-4o和关系关键点约束

前言 由于工厂、车厂的任务需求场景非常明确,加之自今年年初以来,我司在机器人这个方向的持续大力度投入(包括南京、长沙两地机器人开发团队的先后组建),使得近期我司七月接到了不少来自车厂/工厂的订单,比如其中的三个例子&…

数据结构与算法-18算法专向(hash)

话题引入&#xff1a; 给你N&#xff08;1<N<10&#xff09;个自然数,每个数的范围为&#xff08;1~10000000000&#xff09;。现在让你以最快的速度判断某一个数是否在这N个数内&#xff0c;不得使用已经封装好的类&#xff0c;该如何实现。 A[] new int[N1]&#xff…

芝士AI一次过!开题报告通用模板,可直接套用!

在正式写开题报告之前&#xff0c;需要搞清楚以下几个问题。 ①你选择这个论文选题的理由是什么&#xff1f;&#xff08;选题背景&#xff09; ②你打算去研究什么&#xff1f;解决什么问题&#xff1f;&#xff08;研究内容&#xff09; ③该选题目前有哪些研究&#xff0…

新峰商城之订单(二):订单生成

在订单确认页面处理完毕后&#xff0c;此时用户单击“提交订单”按钮&#xff0c;商城系统就对应生成一笔订单数据并保存在数据库中&#xff0c;此即订单生成功能。 在单击“提交订单”按钮后&#xff0c;后端会进行一系列操作&#xff0c;包括数据查询、数据判断、数据整合等&…

构建与优化自定义进程池

1. 什么是进程池&#xff1f; 简单来说&#xff0c;进程池就是预先创建固定数量的工作进程&#xff0c;通过设计任务队列或调度算法来分配任务给空闲的进程 —— 实现“负载均衡”。 2. 进程池框架设计 枚举错误返回值&#xff1a; enum {UsageError 1,ArgError,PipeError };…

人工智能时代的学与教

疫情逐渐散去之后&#xff0c;最最吸引全球目光的应该就是ChatGPT-3了。美国政治家亨利基辛格领衔出版的新书《AI世代与我们人类的未来》(The Age of AI and Our Human Future)中举了一个例子来说明ChatGPT-3的能力。首先让ChatGPT-3阅读关于它自身能力的哲学评论之后&#xff…

【吊打面试官系列-MySQL面试题】MyISAM 表格将在哪里存储,并且还提供其存储格式?

大家好&#xff0c;我是锋哥。今天分享关于【MyISAM 表格将在哪里存储&#xff0c;并且还提供其存储格式&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MyISAM 表格将在哪里存储&#xff0c;并且还提供其存储格式&#xff1f; 每个 MyISAM 表格以三种格式存储…

240912-设置WSL中的Ollama可在局域网访问

A. 最终效果 B. 设置Ollama&#xff08;前提&#xff09; sudo vim /etc/systemd/system/ollama.service[Unit] DescriptionOllama Service Afternetwork-online.target[Service] ExecStart/usr/bin/ollama serve Userollama Groupollama Restartalways RestartSec3 Environme…

读取t x t文件生成exce

读取t x t文件生成excel package com.moka.api.custom.core.controller; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermode…

LangChain基础知识大全

LangChain基础知识大全 一、部署ChatGLM-6B1.拉取源码2.安装环境3.下载模型4.修改api.py配置5.运行api.py 二、Models组件1.LLM&#xff08;大语言模型&#xff09;2.Chat Model&#xff08;聊天模型&#xff09;3.Embedding Model&#xff08;嵌入模型&#xff09;3.1 下载中文…

基于Python的自然语言处理系列(16):TorchText + CNN + Teacher Forcing

在本篇文章中&#xff0c;我们将实现 卷积序列到序列学习模型&#xff08;Convolutional Sequence to Sequence Learning&#xff09;。与之前介绍的基于循环神经网络&#xff08;RNN&#xff09;的模型不同&#xff0c;卷积模型不依赖递归成分&#xff0c;而是通过卷积层&…

增强现实系列—Map-Relative Pose Regression for Visual Re-Localization

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

基于JAVA+SpringBoot+Vue的社区智慧养老监护管理平台

基于JAVASpringBootVue的社区智慧养老监护管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1…

科研绘图系列:R语言多个AUC曲线图(multiple AUC curves)

文章目录 介绍加载R包导入数据数据预处理画图输出结果组图系统信息介绍 多个ROC曲线在同一张图上可以直观地展示和比较不同模型或方法的性能。这种图通常被称为ROC曲线图,它通过比较不同模型的ROC曲线下的面积(AUC)大小来比较模型的优劣。AUC值越大,模型的诊断或预测效果越…

前后端跨域问题及其在ThinkPHP中的解决方案

在现代Web开发中&#xff0c;前后端分离的架构越来越普遍&#xff0c;但这也带来了跨域问题。跨域指的是在一个域下的网页试图请求另一个域的资源&#xff0c;浏览器出于安全考虑会限制这种行为。本文将探讨如何在ThinkPHP中解决跨域问题。 #### 1. 什么是跨域&#xff1f; 跨…

一个皮肤科医生长痘的的自救

内服 复方锌铁钙口服液 丹参瞳胶囊 盐酸米诺环素胶囊 (每天一次) 内服 外用: 克林霉素甲硝搽剂 (泛红的痘痘) 人表皮生长因子(痘印)氢醌软膏 (点阵激光留下的色沉 早晚一次) 至少用两个月【痤疮|痘痘用药 一个皮肤科医生的自救】https://www.bilibili.com/video/BV1zu41…

算法题之每日温度

每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入…

java计算机毕设课设—企业车辆管理系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 资源获取方式在最下方 java计算机毕设课设—企业车辆管理系统(附源码、文章、相关截图、部署视频) 企业车辆管理系统通过计算机&#xff0c;能够直接“透视”车辆使用情况&#xff0c;数据计算自动完成&#xff0c;尽量减少人工干预&#xff0c;可…

Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+源码+数据库)

目录 目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着…

实战指南:深度剖析Servlet+JSP+JDBC技术栈下的用户CRUD操作

本博客总结基于MVC(JSPServletJDBC)操作用户信息的CRUD&#xff08;增删改查功能&#xff09;的完整小项目。包括图片上传和回显&#xff0c;模糊查询&#xff0c;过滤器的登录校验和设置全局字符集以及监听器统计在线用户人数等额外功能&#xff0c;因为代码较多&#xff0c;我…