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

【Redis】set常用命令集合间操作内部编码使用场景

文章目录

  • 前置知识
  • 常见命令
    • SADD
    • SMEMBERS
    • SISMEMBER
    • SCARD
    • SPOP
    • SMOVE
    • SREM
  • 集合间操作
    • SINTER
    • SINTERSTORE
    • SUNION
    • SUNIONSTORE
    • SDIFF
    • SDIFFSTORE
  • 命令小结
  • 内部编码
    • 测试内部编码
  • 使用场景

前置知识

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

  • 集合当中的元素之间是⽆序的
  • 集合当中的元素之间不可以重复
  • ⼀个集合中最多可以存储232 - 1个元素
  • Redis除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集

image-20231021211309580


常见命令

SADD

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

语法:SADD key member [member ...]

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

image-20231023201705882

SMEMBERS

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

语法:SMEMBERS key 

返回值:所有元素的列表 时间复杂度:O(N)

image-20231023201757532

SISMEMBER

判断⼀个元素在不在set中

语法:SISMEMBER key member 

返回值:1表⽰元素在set中。0表⽰元素不在set中或者key不存在 时间复杂度:O(1)

image-20231023201816936

SCARD

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

语法:SCARD key

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

image-20231023202316604

SPOP

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

语法:SPOP key [count] #count:要删除的元素个数,随机删除

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

image-20231023202555667


SMOVE

将member从source上删除,再插入到destination当中

语法:SMOVE source destination member 

返回值:1表⽰移动成功,0表⽰失败 时间复杂度:O(1)

image-20231023202733740

注意:如果要移动的元素不再source当中,那么此时返回0,表示移动失败


SREM

将指定的元素从set中删除,额可以一次删除一个/多个

语法:SREM key member [member ...] 

返回值:本次操作删除成功的元素个数 时间复杂度:O(N),N是要删除的元素个数

image-20231023202829255

集合间操作

交集、并集、差集的概念

image-20231021211910811

交集:最终结果同时出现在两个集合当中的元素

A:1 2 3 4 		B:3 4 5  6  			A和B的交集为:3 4

并集:将多个集合当中的数据集中放在一起,如果元素有重复,最终只保留一份

A:1 2 3 4 		B:3 4 5  6  A和B的并集为:1 2 3 4 5 6

差集:A和B做差集,就是找出在A集合当中存在,在B集合当中不存在的元素

A:1 2 3 4 		B:3 4 5  6  A和B的差集为:1 2  B和A的差集:5 6

SINTER

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

语法:SINTER key [key ...]  #此处的每个key对应一个集合

返回值:交集的元素 时间复杂度:O(N*M),N是最⼩的集合元素个数.M是最⼤的集合元素个数

image-20231023202918269

注意:1个或者多个set取交集


SINTERSTORE

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

语法:SINTERSTORE destination key [key ...]

返回值:交集的元素个数 时间复杂度:O(N*M),N是最⼩的集合元素个数.M是最⼤的集合元素个数.

image-20231023203031685

SUNION

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

语法:SUNION key [key ...] 

返回值:并集的元素 时间复杂度:O(N),N给定的所有集合的总的元素个数

image-20231023203107567

SUNIONSTORE

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

语法:SUNIONSTORE destination key [key ...] 

返回值:并集的元素个数 时间复杂度:O(N),N给定的所有集合的总的元素个数.

image-20231023203134053

SDIFF

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

语法:SDIFF key [key ...] 

返回值:差集的结果 时间复杂度:O(N),N给定的所有集合的总的元素个数

注意:返回的结果是第一个集合中存在而第二个集合(后面集合)中不存在的元素,所以key的顺序很重要

image-20231023203614536

SDIFFSTORE

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

语法:SDIFFSTORE destination key [key ...]

返回值:差集的元素个数 时间复杂度:O(N),N给定的所有集合的总的元素个数

image-20231023203700856


命令小结

image-20231021212405975


内部编码

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

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

测试内部编码

1)当元素个数较少并且都为整数时,内部编码为intset

image-20231021212708820

2)当元素个数超过512个,内部编码为hashtable

3)当存在元素不是整数时,内部编码为hashtable

image-20231021212739170


使用场景

1.集合类型⽐较典型的使⽤场景是标签

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

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

2.计算用户之间的共同好友 => 集合当中求交集

3.使用set统计UV进行去重

一个互联网产品如何衡量用户量和用户规模

1.PV-page view:用户每次访问该服务器,每次访问都会产生一个PV

2.UV-user view:每个哟关乎访问服务器都会产生一个uv,但是同一个用户多次访问,不会使uv增加,uv需要按照用户进行去重

相关文章:

【Redis】set常用命令集合间操作内部编码使用场景

文章目录 前置知识常见命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结内部编码测试内部编码 使用场景 前置知识 集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,在…...

94. 二叉树的中序遍历 --力扣 --JAVA

题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 解题思路 中序遍历的顺序为左中右;通过递归来遍历左子树、添加数据、遍历右子树; 代码展示 package zero.zero.nine;import java.util.ArrayList; import java.util.List;/*** …...

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…...

autollm 指令设计

autollm 指令设计 可循环示意图文本 示意图AI解释可循环示意图 文本 示意图 # <|aos|>环境<|bos|>他人<|cos|>自己<|dos|>表示是否进行写python 代码来从外界获取辅助数据来重构 前面所有的信息<|eos|>代表是否生成python 代码控制各种外审设备…...

浙江大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交浙江大学任意中危或以上级别漏洞...

ROS 学习应用篇(三)服务Server学习之Server

话题Topic是订阅器与发布器节点之间的&#xff0c;而服务则是客户端&#xff08;Client&#xff09;和服务器&#xff08;Server&#xff09;间的&#xff0c;前者是异步的&#xff0c;后者是同步的。而且话题是单项的不需要服务器上线&#xff0c;而服务是双向的。在开启服务之…...

vue+css动画 实现文字的上下轮播切换

突然间碰到一个比较丝滑的特效,就研究了一下想把它实现出来。 效果:渐隐消失,底部往上走覆盖出现 以下是完整代码,复制粘贴即可运行 <template><div class="aaa"><divclass="page1":class="{ private-fade-out: prevIndex === 1…...

debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)

文章目录 前言一、服务器配置安装wireguard软件生成私钥公钥配置服务器参数配置服务器sysctl参数启动、停止服务端 二、用户端配置安装wireguard软件生成私钥公钥配置客户端参数启动、停止客户端配置服务开机启动 三、服务器添加、删除客户四、配置掉线自启动配置掉线自启动脚本…...

LeetCode146.LRU缓存

写了一个小时&#xff0c;终于把示例跑过了&#xff0c;没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同&#xff0c;没想到有18页的word&#xff0c;然后我一直检查终于找出了问题&#xff0c;而且这个bug真的太活该了&#xff0c…...

5-7 使用函数求余弦函数的近似

实现一个函数&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精确到最后一项的绝对值小于e&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬…...

Kotlin HashMap entries.filter过滤forEach

Kotlin HashMap entries.filter过滤forEach fun main(args: Array<String>) {val hashMap HashMap<String, Int>()hashMap["a"] 1hashMap["b"] 2hashMap["c"] 3println(hashMap)hashMap.entries.filter {println("filter $…...

css的预处理

CSS的预处理器是一种CSS的扩展&#xff0c;可以让开发者使用更加高效、灵活的方式来编写CSS代码。 常用的CSS预处理器包括&#xff1a; Sass&#xff1a;基于Ruby的CSS预处理器&#xff0c;提供了大量的函数和变量等扩展功能。 Less&#xff1a;基于JavaScript的CSS预处理器&…...

[云原生案例2.2 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】网络插件部分

文章目录 1. Kubernetes的网络类别2. Kubernetes的接口类型3. CNI网络插件 ---- Flannel的介绍及部署3.1 简介3.2 flannel的三种模式3.3 flannel的UDP模式工作原理3.4 flannel的VXLAN模式工作原理3.5 Flannel CNI 网络插件部署3.5.1 上传flannel镜像文件和插件包到node节点3.5.…...

Go开发基础环境搭建

前面&#xff0c;我们写了下关于GO的入门简介&#xff0c;今天我们打算实操&#xff0c;在实操之前需要准备下基础环境。 IDE开发工具 GoLand 是一款由捷克软件开发公司 JetBrains 专为 Go 开发的跨平台商业 IDE。Goland 具有 Strong Code Insight、Navigation & Search、…...

Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图

Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图 1、安装依赖2、页面Demo使用3、效果图 1、安装依赖 官方文档&#xff1a;https://echarts.apache.org/zh/option.html#title 官方在线示例&#xff1a;https://echarts.apache.org/exampl…...

centos 7.9系统安装老版本jenkins,并解决插件问题

1.初衷 因为jenkins随着时间推移&#xff0c;其版本也越来越新&#xff0c;支持它运行的JDK也越来越新。基于不折腾的目标&#xff0c;我们安装一个老的固定版本就行。以前安装新版本&#xff0c;经常碰到的问题就是插件安装不兼容的问题。现在这个问题&#xff0c;可以把以前…...

BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.02329 摘要&#xff1a; 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而&#xff0c…...

《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!

目录 关于博主前言专家推荐本书适合谁&#xff1f;内容简介书本目录权威作者团队其他 关于博主 &#x1f680;Python爬虫项目实战系列文章&#xff01;&#xff01; ⭐⭐欢迎订阅⭐⭐ 【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码&#xff08;过Authorization认…...

【Java开发】之获取客户端真实 IP 地址

一、应用场景 在投票系统开发中&#xff0c;为了防止刷票&#xff0c;我们需要限制每个 IP 地址只能投票一次&#xff1b;当网站受到诸如 DDoS&#xff08;Distributed Denial of Service&#xff0c;分布式拒绝服务攻击&#xff09;等攻击时&#xff0c;我们需要快速定位攻击者…...

Linux RPM包安装、卸载和升级

我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序&#xff0c;读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下&#xff0c;RPM 包采用系统默认的安装路径&#xff0c;所有安装文件会按照类别分散安装到表 1 所…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...