Redis远程字典服务器(7)—— set类型详解

news2024/11/15 7:46:36

目录

一,基本情况

二,常用命令

2.1 sadd

2.2 smembers,sismember

2.3 spop,srandmember

2.3 smove,srem

2.4 sinter,sinterstore求交集

2.5 sunion,sunionstore求并集

2.6 sdiff,sdiffstore求差集

三,内部编码

四,应用场景

4.1 标签

4.2 共同好友

4.3 统计UV


一,基本情况

set表示含义叫做“集合”,一个术语可能有多种含义,比如:set有“集合”的含义,也有“设置”的含义。

集合就是把一些有关联的数据放到一起,有下面几个特点:

  1. 集合中的元素是“无序”的,这里的“无序”是和list对应的,有序还是无序,关键就在于元素顺序是否重要
  2. 集合中的元素不能重复,这点和list也是相反的
  3. 和list类似,集合中的每个元素也都是string类型(我们也可以用json的格式让set存结构化数据)

二,常用命令

官方命令文档传送门:Commands | Docs (redis.io)

2.1 sadd

SADD key member [member ...]

sadd是set add的缩写,也就是往set里面添加元素,我们一般把集合里的元素叫做 “member”,每个member都是一个string字符串

2.2 smembers,sismember

smembers作用是获取一个set里的是所有元素,是无序的;sismember作用是判断一个元素是否在set里

集合的操作都是带有“ S ”前缀的,判定当前元素是否在集合中

2.3 spop,srandmember

 pop一般表示“从末尾”删除一个元素,由于集合中的元素是无序的,此时“哪一个元素是末尾”就无关紧要了,使用spop删除元素的时候,是“随机删除”;srandmember作用是“随机”从key中获取一个数

spop key [count] #其中当count不写的时候,随机删除一个;写的时候,写几个删几个

注意:官方文档保证,spop每次删除时,都是随机的,因为在源码中实现spop可执行程序时,就采用了生成随机数的方式:

2.3 smove,srem

smove source destination member

smove作用是把 member 从 source 上删除,再插入到 destination 中,两个都是set类型,当source没有member时,smove返回0;srem作用是删除指定的member,可以一次删除多个

smove: 

当set1有1时,再从set2移动一个1过来,但是由于元素不能重复,虽然smove会返回1表示插入成功,但是set2只有一个1,set1的1被删除

srem: 

2.4 sinter,sinterstore求交集

set既然称为“集合”,那么也应该有集合的功能,比如数学里的“交集”,“并集”,“差集”,Redisset类型也支持这几个操作,并且效果和数学一致:

sinter key [key...]

sinter表示获取给定的set中交集的元素,每个key都对应一个set集合,返回值就是最终交集的数据

sinterstore destination key [key...]

sinterstore作用也是求交集,但是它直接把算好的交集放进一个destination 这个 key 对应的集合中

 注意:如果key已经存在,再写入会覆盖原先的集合里的元素:

2.5 sunion,sunionstore求并集

sunion作用是获取给定的set并集中的元素,返回值为并集结果;sunionstore和上面的sinterstore一样,也是将结果存到指定key的集合中:

2.6 sdiff,sdiffstore求差集

sdiff作用是求差集,用法也和上面的一样;sdiffstore也是一样的:

 

三,内部编码

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

四,应用场景

4.1 标签

使用set来保存用户的“标签”(tag)

例如 A用户对娱乐、体育板块比较感兴趣,B用户对历史、新闻比较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同⼀个标签的人,以及用户的共同喜好的标签,这些数据对于增强用户体验和用户黏度都非常有帮助。 例如⼀个 电子商务网站会对不同标签的用户做不同的产品推荐。

这里说的标签,就是一些简短的字符串,此时就可以把标签保存到Redis的set中了 

“用户画像”,这种事情其实是挺复杂的事情,一般的大厂都会有专门的团队做这样的工作,用来准确描述一个人的喜好等

上面的玩法,某音是玩得最好得,其他互联网大厂一看,也都纷纷效仿和跟进 --> 信息茧房 --> 你看到的东西都是你愿意看到的,你不愿意看的就很难被你看到 --> 你看到的内容始终是一个小圈子 --> 到处传递焦虑的,当你很认真看了一个焦虑视频之后,人家服务器就判定,你非常爱看这种类型的视频,然后就给你狂推送

4.2 共同好友

 set还有一个用处,就是使用set来计算用户之间的共同好友,就是“基于求交集

比如QQ就有时候显示“您与***有多个共同好友,点击查看详情”之类的显示

4.3 统计UV

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

主要有两方面:

  1. PV:page view,比如我打开必应,搜索一个东西,中间的每次点击,都会产生这样一个PV,简单来说就是用户每次访问这个服务器都会产生一个PV
  2. UV:PV是针对一个用户的,UV就是每个用户,访问服务器,都会产生一个UV,但是同一个用户多次访问服务器,UV也不会增加了;所以UV需要按照用户进行去重,所以我们就可以使用set来实现

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

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

相关文章

Mysql视图整理

理论 初级语法及操作 操作基于navicat视图化,其他管理工具基本类似 参考即可 这里附上官网免费版下载链接:Navicat Premium Lite | 简单的数据库管理和开发工具 首先:选择选中数据库--》最上面的视图--》新建视图--》 我们可以看到这里&a…

three.js 几何体、材质和网格模型

场景Scene、相机Camera、渲染器Renderer初始化完成之后,可以向场景中添加一个简单的模型进行展示。在此之前需要了解三个概念:几何体、材质、网格模型。 几何体:表示物体的几何形状。材质:表示物体的外观效果。网格模型&#xff…

springboot的学习(一):springboot的基础

简介 springboot的基础的知识点的学习总结 springboot 设计目的是为了简化spring应用的初始搭建和开发过程。 简单例子 new project,一般用这个阿里的地址:https://start.aliyun.com/ 点击next,选择jdk版本 点击next,选择模…

88.SAPUI5 Model Binding的问题-在view更改数据,model却不变

目录 1.背景 2.sap.ui.model.BindingMode sap.ui.model.BindingMode.OneWay sap.ui.model.BindingMode.TwoWay 3.oModel.setDefaultBindingMode 方法说明 execOneWay方法 execTwoWay方法 1.背景 在做一个UI5项目,后台读取sap.ui.model.Model后,把…

Vuex 深度解析 | 面试常问问题案例

Vuex 深度解析 | 面试常问问题案例 Vuex 是 Vue.js 应用程序的状态管理模式和库。它为 Vue.js 应用程序提供了一个集中存储所有组件的共享状态,并以相应的规则保证状态以一种可预测的方式发生变化。接下来,我们将深入探讨 Vuex 的核心概念、使用方式、AP…

项目管理高效秘诀:优选软件大公开

国内外主流的 10 款项目管理系统对比:PingCode、Worktile、Asana、Trello、ClickUp、Zoho Projects、Hive、Teambition、飞书、Tapd。 在寻找完美的项目管理工具时,许多团队都面临一个共同的问题:除了已知的Worktile之外,还有哪些…

“从创建到管理,Linux进程编程是你掌握系统资源的金钥匙!“#Linux系统编程之进程【下】

"从创建到管理,Linux进程编程是你掌握系统资源的金钥匙!"#Linux系统编程之进程【下】 前言预备知识一、 父进程等待子进程退出(一)1.1 为啥要等待子进程退出1.2 父进程等待子进程退出并收集退出状态1.3 编程验证僵尸进程…

【47 Pandas+Pyecharts | 杭州二手房数据分析可视化】

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 过滤数据2.3 行政区处理2.4 地址处理2.5 房屋信息处理2.6 面积处理2.7 楼层处理2.8 年份处理2.9 房价处理2.10 删除不用的列2.11 数据类型转换2.12 查看…

【数学建模】Matlab 编程

MATLAB是美国MathWorks公司自20世纪80年代中期推出的数学软件,具有优秀的数值计算能力和卓越的数据可视化。由于Maltab编程方便,有大量内部函数和工具箱可以使用,作图也 十分方便,因此在数学实验和数学建模竞赛中,我们…

揭秘紧固件分销网络:如何成为结构安全和社会进步的关键支点?

全球产品分销的历史源远流长,早在国际贸易初期就已形成。在紧固件行业中,随着各行业对紧固件需求的不断增长,市场呈现出积极的发展趋势。紧固件在结构、机械、设备及其他众多组件中扮演着至关重要的角色,确保了整个系统的高效运行…

电子家谱族谱在线制作小程序开发

电子家谱族谱在线制作小程序开发 电子家谱在线制作小程序通常会提供一系列的功能来帮助用户创建和维护家谱。这里是一个基于市场上常见的家谱制作小程序的功能列表示例: 基本信息录入: 用户注册与登录个人信息录入(姓名、性别、出生日期、照…

隐藏你的环境文件!否则你的云存储数据可能会被盗并被勒索

网络犯罪分子正在侵入组织的云存储容器,窃取其敏感数据,并且在一些情况下,受害组织还会向他们支付费用,以确保他们不泄露或出售被盗数据。 研究人员表示:“此次活动背后的攻击者可能利用了广泛的自动化技术来成功且快…

车载网络测试实操源码_使用CAPL脚本对CAN总线上的错误帧进行实时监控

系列文章目录 车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件 车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter、CRC、周期、错误帧进行实时监控 车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文 车载网络测试实操源码_使用CA…

企业办公室电脑监控软件有什么好用的推荐(闭眼也可入手)

“工欲善其事,必先利其器。” 在今日之商业战场,企业之兴衰,不仅关乎战略眼光与市场布局,更在于内部管理之精细与效率。 信息技术的飞速发展,企业办公室电脑监控软件应运而生,成为了现代企业管理的得力助…

OpenCV Python 图像处理入门

OpenCV入门 OpenCV:轻量、高效、开源。最广泛使用的计算机视觉工具。 下面涉及图片的读取,RGB彩色通道,区域裁剪,绘制图形和文字,均值滤波,特征提取,模板匹配,梯度算法&#xff0c…

黑马Java零基础视频教程精华部分_19_lambda表达式

系列文章目录 文章目录 系列文章目录一、函数式编程二、Lambda表达式的标准格式三、Lambda表达式的省略写法 一、函数式编程 函数式编程(Functional programming)是一种思想特点。 之前的面向对象:先找对象,让对象做事情。如下图所示,这样会有点小麻烦。…

(一)基于自组织结构的多目标粒子群优化算法(SMOPSO)的无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

理解Pytorch中的collate_fn函数

PyTorch中的DataLoader是最常用的类之一,这个类有很多参数(14 个),但大多数情况下,你可能只会使用其中的三个:dataset、shuffle 和 batch_size。其中collate_fn是比较少用的函数,这对初学者来说…

2024年国家数据局第一批20个“数据要素×”典型案例解析

国家数据局首批20个“数据要素”典型案例解析 1、简介1.1 背景简介1.2 典型案例分类 2、案例解析2.1 工业制造领域案例1:数据要素驱动适应多式联运需求的运输装备协同制造案例2:打造工业数据空间 赋能产业链上下游发展 2.2 现代农业领域案例3&#xff1a…

07一阶电路和二阶电路的时域分析

一阶电路和二阶电路的时域分析 时域分析、频域分析、复频域分析本应该在信号与系统,或者数字信号处理这一章节里面进行处理的。 但在电路理论中也有这些知识,那就要好好掌握一下,打个底。详细细致的部分放到信号与系统里面去掌握