【Redis】set常用命令集合间操作内部编码使用场景
文章目录
- 前置知识
- 常见命令
- SADD
- SMEMBERS
- SISMEMBER
- SCARD
- SPOP
- SMOVE
- SREM
- 集合间操作
- SINTER
- SINTERSTORE
- SUNION
- SUNIONSTORE
- SDIFF
- SDIFFSTORE
- 命令小结
- 内部编码
- 测试内部编码
- 使用场景
前置知识
集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,在集合当中:
- 集合当中的元素之间是⽆序的
- 集合当中的元素之间不可以重复
- ⼀个集合中最多可以存储232 - 1个元素
- Redis除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集
常见命令
SADD
将⼀个或者多个元素添加到set中。注意,重复的元素⽆法添加到set中
语法:SADD key member [member ...]
返回值:本次添加成功的元素个数 时间复杂度:O(1)
SMEMBERS
获取⼀个set中的所有元素,注意,元素间的顺序是⽆序的
语法:SMEMBERS key
返回值:所有元素的列表 时间复杂度:O(N)
SISMEMBER
判断⼀个元素在不在set中
语法:SISMEMBER key member
返回值:1表⽰元素在set中。0表⽰元素不在set中或者key不存在 时间复杂度:O(1)
SCARD
获取⼀个set的基数(cardinality),即set中的元素个数
语法:SCARD key
返回值:set内的元素个数 时间复杂度:O(1)
SPOP
从set中删除并返回⼀个或者多个元素。注意,由于set内的元素是⽆序的,所以删除哪个元素实际是未定义⾏为,即可以看作随机的
语法:SPOP key [count] #count:要删除的元素个数,随机删除
返回值:取出的元素 时间复杂度:O(N),n是count
SMOVE
将member从source上删除,再插入到destination当中
语法:SMOVE source destination member
返回值:1表⽰移动成功,0表⽰失败 时间复杂度:O(1)
注意:如果要移动的元素不再source当中,那么此时返回0,表示移动失败
SREM
将指定的元素从set中删除,额可以一次删除一个/多个
语法:SREM key member [member ...]
返回值:本次操作删除成功的元素个数 时间复杂度:O(N),N是要删除的元素个数
集合间操作
交集、并集、差集的概念

交集:最终结果同时出现在两个集合当中的元素
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是最⼤的集合元素个数
注意:1个或者多个set取交集
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给定的所有集合的总的元素个数
注意:返回的结果是第一个集合中存在而第二个集合(后面集合)中不存在的元素,所以key的顺序很重要
SDIFFSTORE
获取给定set的差集中的元素并保存到⽬标set中
语法:SDIFFSTORE destination key [key ...]
返回值:差集的元素个数 时间复杂度:O(N),N给定的所有集合的总的元素个数
命令小结
内部编码
集合类型的内部编码有两种:
intset
(整数集合):当集合中的元素都是整数并且元素的个数⼩于set-max-intset-entries
配置(默认512个)时,Redis会选⽤intset
来作为集合的内部实现,从⽽减少内存的使⽤hashtable
(哈希表):当集合类型⽆法满⾜intset
的条件时,Redis会使⽤hashtable
作为集合的内部实现
测试内部编码
1)当元素个数较少并且都为整数时,内部编码为intset
2)当元素个数超过512个,内部编码为hashtable
:
3)当存在元素不是整数时,内部编码为hashtable
使用场景
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 代码控制各种外审设备…...

浙江大学漏洞报送证书
获取来源:edusrc(教育漏洞报告平台) url:主页 | 教育漏洞报告平台 兑换价格:20金币 获取条件:提交浙江大学任意中危或以上级别漏洞...

ROS 学习应用篇(三)服务Server学习之Server
话题Topic是订阅器与发布器节点之间的,而服务则是客户端(Client)和服务器(Server)间的,前者是异步的,后者是同步的。而且话题是单项的不需要服务器上线,而服务是双向的。在开启服务之…...

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

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

LeetCode146.LRU缓存
写了一个小时,终于把示例跑过了,没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同,没想到有18页的word,然后我一直检查终于找出了问题,而且这个bug真的太活该了,…...
5-7 使用函数求余弦函数的近似
实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:…...
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的扩展,可以让开发者使用更加高效、灵活的方式来编写CSS代码。 常用的CSS预处理器包括: Sass:基于Ruby的CSS预处理器,提供了大量的函数和变量等扩展功能。 Less:基于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开发基础环境搭建
前面,我们写了下关于GO的入门简介,今天我们打算实操,在实操之前需要准备下基础环境。 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、安装依赖 官方文档:https://echarts.apache.org/zh/option.html#title 官方在线示例:https://echarts.apache.org/exampl…...

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

BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练
来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2306.02329 摘要: 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而,…...

《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!
目录 关于博主前言专家推荐本书适合谁?内容简介书本目录权威作者团队其他 关于博主 🚀Python爬虫项目实战系列文章!! ⭐⭐欢迎订阅⭐⭐ 【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认…...
【Java开发】之获取客户端真实 IP 地址
一、应用场景 在投票系统开发中,为了防止刷票,我们需要限制每个 IP 地址只能投票一次;当网站受到诸如 DDoS(Distributed Denial of Service,分布式拒绝服务攻击)等攻击时,我们需要快速定位攻击者…...

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

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...