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

redis:set集合命令,内部编码,使用场景

在这里插入图片描述

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

文章目录

  • 前言
  • 命令
    • SADD
    • SMEMBERS
    • SISMEMBER
    • SCARD
    • SPOP
    • SMOVE
    • SREM
    • 集合间操作
      • SINTER
      • SINTERSTORE
      • SUNION
      • SUNIONSTORE
      • SDIFF
      • SDIFFSTORE
  • 内部编码
  • 使用场景
  • 总结


前言

ste集合类型是保存多个字符串类型的元素,但和列表类型不同,集合中元素之间是无序的,元素也不允许重复。

在这里插入图片描述

redis除了支持集合内的增删查改操作,同时支持多个集合取交集,并集,差集。


命令

SADD

将一个或者多个元素添加到 set 中。重复元素无法添加到 set 中

SADD key member [ member … ]

返回值:本次添加成功的元素个数
时间复杂度:O(1)

在这里插入图片描述


SMEMBERS

获取一个set中所有元素。元素间的顺序是无序的,获取结果的顺序是随机的

SMEMBERS key

返回值:所有元素的列表
时间复杂度:O(N),N为集合元素个数

在这里插入图片描述


注意:
如果执行多次smembers命令,获取结果顺序一致,可能有以下原因:
在这里插入图片描述


SISMEMBER

判断一个元素在不在 set 中

SISMEMBER key member

返回值:1 表示元素在 set 中;0 表示元素不在 set 中 或者 key 不存在
时间复杂度:O(1),set 集合是通过哈希表来实现的

在这里插入图片描述


SCARD

获取一个 set 的基数,即 set 中的元素个数

SCARD key

返回值:set 内元素的个数
时间复杂度:O(1)

在这里插入图片描述


SPOP

从 set 中删除并返回一个或者多个元素。由于 set 内的元素是无序的,所以取出哪个元素实际是未定义行为,即spop删除元素就是随机删除

SPOP key [count]

返回值:取出的元素
时间复杂度:O(N),N为count的个数

在这里插入图片描述
在这里插入图片描述


SMOVE

将一个元素从 source 取出并放入 destrination 中

SMOVE source destrination member

返回值:1 表示移动成功;0 表示失败
时间复杂度:O(1)
在这里插入图片描述


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-inset-entries 配置时,redis会使用 intset来作为集合的内部实现;intset是一种紧凑的数据结构,专门用于存储整数数值,通过压缩存储,intset能够节省内存空间
  • hashtable(哈希表):当集合类型无法 intset 的条件时,redis会使用hashtable作为集合的内部实现;hashtable允许存储各种类型的元素,set集合的每个元素都作为一个字符串对象存储,而对应的值则统一为nullptr

在这里插入图片描述

使用场景

  1. 使用 set 来保存用户的标签;标签也就是用户画像,分析出用户的一些特征,分析清楚特征之后,再投其所好
  2. 使用 set 来计算用户之间的共同好友;基于 “集合求交集”,A 和 B是好友,B 和 C是好友,B 和 C 和 D都是好友,就可以将D推荐给A
  3. 使用 set 统计 UV(独立访客数量);每一个用户,访问服务器,都会产生一个 UV,但是同一个用户多次访问,不会是UV增加,UV需要按照用户进行去重

总结

以上就是我的redis学习笔记

在这里插入图片描述

相关文章:

redis:set集合命令,内部编码,使用场景

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码使用场景总结 前言…...

45期代码随想录算法营总结

代码随想录训练营总结与收获 在为期60天的代码随想录训练营结束后,我感慨良多。这段时间不仅让我在编程技能上有了明显的提升,更让我在学习习惯和时间管理上有了深刻的反思和改变。 报名参加这个训练营对我来说是一个重要的监督机制。之前我总是拖延&a…...

深入理解Java中的instanceof关键字及接口新特性:方法实现的可能性

目录 引言 1. 什么是instanceof关键字? 1.1 语法结构 1.2 instanceof的用法示例 1.3 instanceof的应用场景 2. Java中的接口能包含方法实现吗? 2.1 默认方法(Default Method) 2.2 静态方法(Static Method&…...

【python中如果class没有self会怎行】

python中如果class没有self会怎样TOC 在Python中,self是一个约定俗成的名称,用于表示类的实例。如果没有使用self,会导致以下问题: 1、无法访问实例属性: 在类的方法中,如果没有self,方法将无…...

【算法】(Python)动态规划

动态规划: dynamic programming。"programming"指的是一种表格法,而非编写计算机程序。通常解决最优化问题(optimization problem)。将问题拆分成若干个子问题,求解各子问题来得到原问题的解。适用于多阶段…...

EasyExcel 学习之 导出 “提示问题”

EasyExcel 学习之 导出 “提示问题” 现象分析解决(伪代码)前端 POST 实现后端实现 现象 EasyExcel 支持导出 xlsx、xls、csv 三种文件格式。在导出过程中可能发生各种异常,当发生异常时应该提示错误信息而非导出一个错误的文件。 分析 首…...

应用系统开发(3)低功耗四运算放大器LM324N

LM324N 是一种广泛使用的 低功耗四运算放大器,由德州仪器(Texas Instruments)和其他制造商生产。它具有四个独立的运算放大器,能够在单电源或双电源模式下运行,适合多种模拟电路应用。以下是详细信息: 芯片基本信息 型号:LM324N封装类型:常见 DIP(双列直插封装)或 SO…...

基于微信小程序的电商平台+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理、商品分类、商品管理、订单管理、系统管理等),普通用户(个人中心、收藏、我的订单、查看商品等)技术选型:SpringBo…...

[Android] Graphic Buffer 的申请

前言: MediaCodec 支持 texture mode,即MediaCodec解码video完毕后把 yuv 数据填入 GPU 共享出来的 graphic buffer 里面,app 会把 video 的 yuv数据 和 ui 的数据通过通过软件渲染组件(opengl等)发送给GPU 进行一并渲染。这样做的效率较低&…...

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种: Minor Compaction:是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,对于删除、过期、多余版本的数据不进行清除。 Major Compaction:是指将所有的StoreFile合并成一个StoreFile&am…...

多平台编包动态引入依赖的解决方案

最近开发时遇到了这样的需求,A 平台需要引入一个 video.js,B 平台却是不需要的,那么面向 B 平台打包的时候把依赖装进去自然就不大合适。最好的方法是动态引入依赖,根据平台来判断要不要引入 动态引入依赖 很快啊,动…...

[单例模式]

目录 [设计模式] 单例模式 1. 饿汉模式 2. 懒汉模式 3. 单例模式的线程安全问题 [设计模式] 设计模式是软件工程中的一种常见做法, 它可以理解为"模板", 是针对一些常见的特定场景, 给出的一些比较好的固定的解决方案. 不同语言适用的设计模式是不一样的. 这里…...

速盾:游戏盾的功能和原理详解

速盾有一款专注于网络游戏安全的防护系统,它通过实时监测游戏网络流量和玩家行为,以及使用先进的算法和技术进行分析和识别,检测出各种外挂、作弊行为和恶意攻击,从而保障游戏的公平性和玩家的安全性。 速盾游戏盾的主要功能包括…...

Spleeter:音频分离的革命性工具

目录 什么是Spleeter?Spleeter的工作原理Spleeter的应用场景Spleeter的技术优势Spleeter的挑战与局限性结论 什么是Spleeter? Spleeter 是一个由 Deezer 开发的开源音频源分离工具。它基于深度学习技术,尤其是卷积神经网络(CNN&a…...

【笔记】自动驾驶预测与决策规划_Part6_不确定性感知的决策过程

文章目录 0. 前言1. 部分观测的马尔可夫决策过程1.1 POMDP的思想以及与MDP的联系1.1.1 MDP的过程回顾1.1.2 POMDP定义1.1.3 与MDP的联系及区别POMDP 视角MDP 视角决策次数对最优解的影响 1.2 POMDP的3种常规解法1.2.1 连续状态的“Belief MDP”方法1. 信念状态的定义2. Belief …...

openresty入门教程:access_by_lua_block

在OpenResty中,access_by_lua_block 是一个功能强大的指令,它允许你在Nginx的访问控制阶段执行Lua脚本。这个阶段发生在Nginx处理请求的过程中,紧接在rewrite阶段之后,但在请求被传递到后端服务器(如PHP、Node.js等&am…...

Caused by: org.apache.flink.api.common.io.ParseException: Row too short:

Flink版本 1.17.2 错误描述 Caused by: org.apache.flink.api.common.io.ParseException: Row too short: 通过flink中的flinkSql直接使用对应的connector去获取csv文件内容,报获取的数据太短了 可能原因 1.创建的表字段多于csv文件当中的表头 定位 在获取csv…...

hbase的安装与简单操作

好的,这里是关于 HBase 的安装和基本操作的详细步骤,分成几个更清晰的阶段: 第一部分:安装和配置 HBase 1. 环境准备 HBase 依赖于 Hadoop,因此首先确保 Hadoop 已经正确安装和配置。如果没有安装,请先下…...

PySpark本地开发环境搭建

一.前置事项 请注意,需要先实现Windows的本地JDK和Hadoop的安装。 二.windows安装Anaconda 资源:Miniconda3-py38-4.11.0-Windows-x86-64,在window使用的Anaconda资源-CSDN文库 右键以管理员身份运行,选择你的安装路径&#x…...

【进阶】Stable Diffusion 插件 Controlnet 安装使用教程(图像精准控制)

Stable Diffusion WebUI 的绘画插件 Controlnet 最近更新了 V1.1 版本,发布了 14 个优化模型,并新增了多个预处理器,让它的功能比之前更加好用了,最近几天又连续更新了 3 个新 Reference 预处理器,可以直接根据图像生产…...

从PC到移动:DRAM市场如何从周期性震荡走向结构性稳定

1. DRAM市场格局的深层演变:从周期性震荡到结构性稳定干了十几年硬件设计和供应链的活儿,我算是亲眼见证了DRAM这个行当的“过山车”行情。早些年,跟同行聊起内存,大家第一反应都是“又涨了?”或者“崩盘了&#xff1f…...

半导体虚拟计量技术:AI驱动的制造工艺优化

1. 半导体制造中的计量困境与虚拟计量技术崛起 在半导体制造车间里,工程师们每天都要面对一个令人头疼的难题:如何在保证产品质量的同时,又能实时掌握每一片晶圆的工艺状态?传统物理计量方法就像是用显微镜检查大海——虽然精确&a…...

《深入浅出通信原理》连载101-105

连载101:正弦信号的傅立叶变换连载102:直流信号的傅立叶变换连载103:复指数信号傅立叶变换的另外一种求法连载104:非周期信号的傅立叶变换连载105:傅立叶变换的对称性(一)...

别再混淆了!结构方程模型SEM中的反映型vs构成型指标,用PLS-PM一次讲清

结构方程模型中的反映型与构成型指标:理论辨析与PLS-PM实战指南 在数据分析的复杂世界里,结构方程模型(SEM)就像是一把瑞士军刀,能够同时处理测量模型和结构模型。但许多研究者在使用这把"军刀"时,常常忽略了一个关键细…...

孤舟笔记 IO 与网络编程篇五 网络编程你真的懂吗?从Socket到TCP连接全解析

文章目录一、先说结论:网络编程核心事实二、TCP 编程:三次握手的 Socket 视角三、UDP 编程:无连接的数据报四、服务端线程模型演进模型一:一连接一线程(最原始)模型二:线程池(改进&a…...

基于 HM-TM32 红外摄像头:棉花燃烧+起火自动录制 30 秒视频

在棉花仓储、纺织原料监测等实际场景中,利用 HM-TM32 微型红外测温机芯实现非接触式火情监测具备极高的实用价值,本文基于 Windows 笔记本环境,实现红外摄像头实时画面显示,并在检测到棉花起火或高温异常时自动录制 30 秒视频留存…...

AI相册搜索效率提升300%?Gemini驱动的Google Photos智能检索全解析,含实测对比数据与隐私边界警告

更多请点击: https://intelliparadigm.com 第一章:AI相册搜索效率提升300%?Gemini驱动的Google Photos智能检索全解析,含实测对比数据与隐私边界警告 Google Photos 近期将 Gemini Pro 1.5 深度集成至其搜索后端,支持…...

从“按钮太小”看硬件设计:如何平衡参数竞赛与用户体验

1. 从一场工程师的幽默竞赛说起最近在整理旧资料时,翻到一篇2013年EE Times上的趣闻,讲的是他们每月一次的“标题党”(Caption Contest)竞赛。四月份那期的主题是一幅漫画,画的是一个工程师站在一个巨大的智能手机原型…...

别再只用memcpy了!手把手教你用memcpy_s写出更安全的C语言代码(附VS2022实战)

从memcpy到memcpy_s:现代C语言安全编程实战指南 在Visual Studio 2022的编译输出窗口中,那个刺眼的C4996警告已经成为许多C语言开发者的"老朋友"。当看到"error C4996: memcpy: This function or variable may be unsafe"时&#xf…...

立法强制技术目标为何违背工程创新规律?

1. 项目概述:当立法者试图为工程目标“画图纸”作为一名在电子工程领域摸爬滚打了十几年的工程师,我经常在技术社区和行业媒体上看到一种让我既无奈又担忧的讨论:立法机构试图通过一纸法令,来规定某个具体技术目标必须在未来某个时…...