Redis带你深入学习数据类型set

目录

1、set

2、set相关命令

2.1、添加元素 sadd

2.2、获取元素 smembers

2.3、判断元素是否存在 sismember

2.4、获取set中元素数量 scard

2.5、删除元素spop、srem

2.6、移动元素smove

2.7、集合中相关命令:sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore

3、应用场景


1、set

set数据类型的特点;

  • set中的元素是无序的
  • set中的元素不能重复
  • set中支持多个几个取交集并集差集等~

2、set相关命令

2.1、添加元素 sadd

  • sadd:往集合中添加元素;重复元素无法添加到集合中
  • 语法:sadd key member [member ...]
  • 返回值:成功添加元素的个数(集合已经存在的元素,再次添加不算为添加成功)
  • 时间复杂度O(1)

举例:

2.2、获取元素 smembers

  • smembers:获取一个key中的所有元素;元素顺序是无序的
  • 语法:smembers key
  • 返回值:集合中的所有元素
  • 时间复杂度O(1)

举例:

2.3、判断元素是否存在 sismember

  • sismember:
  • 语法:
  • 返回值:
  • 时间复杂度

举例:

        注:当集合中存放的都是整数,且数量不是特别多的情况下,内部编码是intset,此时虽然是无序的,但我本人猜测可能还是有处理的,相对来说还是有序的,从小到大 排列~

        当内部编码是hashtable时,就是完全无序了~

2.4、获取set中元素数量 scard

  • scard:获取一个set的基数,也就是set中的元素个数
  • 语法:scard key
  • 返回值:set内的元素的个数
  • 时间复杂度O(1)

举例:

2.5、删除元素spop、srem

spop: 随机删除一个或多个元素,由于set中元素是无序的,所以具体删除哪个元素也是随机的

  • 语法:spop key [count]  【不带参数默认为1】
  • 返回值:被删除的元素的值
  • 时间复杂度O(n) --- n->count

举例:

srem:删除集合中指定的元素

  • 语法:srem key member [member...]
  • 返回值:成功删除的元素个数
  • 时间复杂度O(k)---被删除的个数~

举例:

2.6、移动元素smove

  • smove:将一个元素从一个集合中移动到另一个集合中~
  • 语法:smove source destination member
  • 返回值:命令执行成功返回1;失败返回0
  • 时间复杂度O(1)

举例:

2.7、集合中相关命令:sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore

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为指定的所有的集合set的总的元素个数

举例:

sunionstore:获取指定的集合set的并集中的元素并保存到指定的目标集合set中

  • 语法:sunionstore
  • 返回值:并集的元素个数
  • 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数

举例:

sdiff:获取指定的集合set的差集中元素

  • 语法:sdiff key [key...]
  • 返回值:差集的元素
  • 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数

举例:

sdiffstore:

  • 语法:sdiffstore
  • 返回值:差集的元素个数
  • 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数

举例:


3、应用场景

3.1、使用set来保存用户的标签

        例如最常见的“人物画像”,给相应的用户打上对应标签后,针对性给该用户推送他可能感兴趣的话题

        或者例如:我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并

3.2、使用set计算用户间的共同好友

        共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用

        例如QQ中有一个功能叫做你可能认识的人~

3.3、使用set统计UV

        PV:用户每次访问某一个服务器时,都会产生一个pv

        UV:用户访问服务器,会产生一个UV,但同一个多次访问不会使UV增加,所以使用set统计UV,能够很好的做到去重~

好啦,下期见啦~

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

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

相关文章

CSS:屏幕正中间有个元素A,元素A中有文字A,随着屏幕宽度的增加

始终需要满足以下条件: A元素垂直居中于屏幕***;A元素距离屏幕左右边距各10px;A元素里面的文字”A”的font-size:20px;水平垂直居中;A元素的高度始终是A元素宽度的50%; (如果搞不定可以实现为A元素的高度固定为200px;)请用 html及…

【Unity基础】3.脚本控制物体运动天空盒

【Unity基础】3.脚本控制物体运动&天空盒 大家好,我是Lampard~~ 欢迎来到Unity基础系列博客,所学知识来自B站阿发老师~感谢 (一)搭建开发环境 (1)下载visual studio 在我们下载unity编译器的时候&…

Microsoft Edge网页视频播放绿屏解决方法(B站)

一:问题,在B站观看视频时有绿色条纹 二:查找原因,未知 三:解决方法 三.1网页设置关闭硬件加速 三.2 点击视频播放下的 “小齿轮”,然后点击“更多播放设置” 把播放策略 “默认” 改为“AVC” 四&…

Tomcat配置域名和端口

Tomcat配置域名和端口 1.进入tomcat文件夹2. cd 到你的tomcat下3. 修改server.xml文件中监听端口4. 重启tomcat 1.进入tomcat文件夹 2. cd 到你的tomcat下 3. 修改server.xml文件中监听端口 继续修改server.xml中Host 4. 重启tomcat 进入bin ./shutdown.sh ./startup.sh …

etcd分布式存储

etcd分布式存储 etcd简介etcd下载安装etcd常用命令etcd配置参数etcd集群golang操作etcd

rrweb入门

rrweb 背景 rrweb 是 record and replay the web,是当下很流行的一个录制屏幕的开源库。与我们传统认知的录屏方式(如 WebRTC)不同的是,rrweb 录制的不是真正的视频流,而是一个记录页面 DOM 变化的 JSON 数组&#x…

【鲁棒电力系统状态估计】基于投影统计的电力系统状态估计的鲁棒GM估计器(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

SpringCloud Alibaba 入门到精通 - Nacos

SpringCloud Alibaba 常用组件 一、基础结构搭建1.父工程创建2.子工程创建 二、Nacos:注册中心1.服务端搭建2.注册中心-客户端搭建3.注册中心-管理页面4.注册中心-常用配置5.注册中心-核心功能总结 三、Nacos注册中心集成Load Balancer 、OpenFeign1.Nacos客户端集成…

一键部署k8s集群

前置动作 关闭防火墙 systemctl disable firewalld && systemctl stop firewalld 关闭SELinux sed -i s#SELINUXenforcing#SELINUXdisabled#g /etc/selinux/config && grep SELINUXdisabled /etc/selinux/config setenforce 0 getenforce 关闭swap # 关闭…

前端面试题JS篇(4)

浏览器缓存 浏览器缓存分为强缓存和协商缓存,当客户端请求某个资源时,获取缓存的流程如下: 先根据这个资源的一些 http header 判断它是否命中强缓存,如果命中,则直接从本地获取缓存资源,不会发请求到服务…

c语言练习44:深入理解strstr

深入理解strstr strstr作用展示&#xff1a; #include <stdio.h> #include <string.h> int main() {char str[] "This is a simple string";char* pch;pch strstr(str, "simple");/*strncpy(pch, "sample", 6);*/printf("%s…

Android逆向学习(一)vscode进行android逆向修改并重新打包

Android逆向学习&#xff08;一&#xff09;vscode进行android逆向修改并重新打包 写在前面 其实我不知道这个文章能不能写下去&#xff0c;其实我已经开了很多坑但是都没填上&#xff0c;现在专利也发出去了&#xff0c;就开始填坑了&#xff0c;本坑的主要内容是关于androi…

Scrum认证高级Scrum Master (A-CSM) 认证培训课程

课程简介 高级ScrumMaster (Advanced Certified ScrumMaster, A-CSM) 认证课程是国际Scrum联盟推出的进阶级Scrum认证课程&#xff0c;是Scrum Master通往专业级敏捷教练必经的学习路径。 在ScrumMaster&#xff08;CSM&#xff09;认证课程中&#xff0c;您学习到了Scrum的价…

Centos 6.5 升级到Centos7指导手册

一、背景 某业务系统因建设较早&#xff0c;使用的OS比较过时&#xff0c;还是centos6.5的系统&#xff0c;因国产化需要&#xff0c;需将该系统升级到BClinux 8.6&#xff0c;但官方显示不支持centos 6.x升级到8&#xff0c;需先将centos6.5升级到centos7的最新版&#xff0c…

华为OD机试 - 战场索敌 - 深度优先搜索dfs算法(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、深度优先搜索dfs五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明4、如果增加目标敌人数量K为55、来&#xff0c;上强度 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 有一个大小是N*M…

RNA 36. SCI 文基于转录组数据识别CNV并可视化 (CaSpER)

转录组生信分析教程 桓峰基因公众号推出转录组分析教程&#xff0c;有需要生信的老师可以联系我们&#xff01;转录分析教程整理如下&#xff1a; RNA 1. 基因表达那些事--基于 GEO RNA 2. SCI文章中基于GEO的差异表达基因之 limma RNA 3. SCI 文章中基于T CGA 差异表达基因之 …

python28种极坐标绘图函数总结

文章目录 基础图误差线等高线polar场图polar统计图非结构坐标图 &#x1f4ca;python35种绘图函数总结&#xff0c;3D、统计、流场&#xff0c;实用性拉满 matplotlib中的画图函数&#xff0c;大部分情况下只要声明坐标映射是polar&#xff0c;就都可以画出对应的极坐标图。但…

基于SSM的校园美食交流系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

2023-9-10 集合-Nim游戏

题目链接&#xff1a;集合-Nim游戏 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_set>using namespace std;const int N 110, M 10010;int n, m; int s[N], f[M];int sg(int x) {if(f[x] ! -1) return f[x];//…

【补】代码随想录算法训练营day38|动态规划 |509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯

动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推…