Redis数据结构之set

一.set集合特性

集合类型也是保存多个字符串类型的元素的,但和list列表不一样,集合中的元素是无序的,而且元素不能够重复,不仅支持增删查改,还支持交集并集等操作

二.相关命令

1.sadd

sadd key members……

咱们把集合中的元素叫做member(和hash中的field要区分开)

一次可以添加多个元素

返回值是元素个数

时间复杂度O(1)

2.smembers

smembers key 获取集合中的元素,是无序的

时间复杂度O(N)

3.sismember

sismember key member 判断一个元素在不在集合中

时间复杂度O(1)

返回1表示在,返回0表示不在

4.scard

scard key 获取一个集合中的基数(cardinality),即set中的元素个数

时间复杂度O(1)

5.spop

spop key (count) 从中删除并返回一个或者多个元素。但注意,由于set内部的元素是无序的,所以不知道哪个元素是末尾,所以取出哪个元素实际上是未定义行为,即是随机的

时间复杂度:O(N),N就是count

如果构造一个set,按照1234的顺序插入元素,pop的结果会是啥,我们无法得知

6.smove

smove source destination member 把member从source上删除,再插入到destination中

如果要移动的元素再source中不存在,就会返回0

7.srem

srem key member[member……] 一次删除一个或多个member'

返回值是删除成功的个数

8.sinter

sinter key [key……]求交集,返回值是最终交集的数据

O(M*N)

9.sinterstore

sinterstore destination key[key……]将得到的交集放到destination中

10.sunion sunionstore

sunion key [key……]求并集

sunionstore同上

O(N)

11.sdiff sdiffstore

sdiff是求差集

O(N)

上述集合简单操作的时间复杂度的求法涉及到了集合内部的源码实现

三.内部编码

intset:整数集合,当集合中元素都是整数并且个数小于set-max-inset-entries时,就会用intset

hashtable:哈希表,除上述之外的都是用哈希表

四.使用场景

1.使用set来保存用户标签

例如:A用户对娱乐板块感兴趣,B对体育板块感兴趣,这些兴趣点就可以被抽象成标签。有了这些数据,就可以得到喜欢同一个标签的用户,也可以得到用户共同喜欢的标签,这些事u据对于增强用户体验等都有非常大的帮助

1.给用户添加标签

sadd user:1:tags tag1 tag2 tag3……

2.给标签添加用户

sadd tag:1:users user1 user2……

3.删除用户下的标签

srem user:2:tags tag3 tag5

4.删除标签下的用户

srem tag:3:users user1 user45

5.计算共同的兴趣

sinter user:1:tags user:4:tags

这其实就是给用户画像:分析清楚你这个人的特征,分析清楚后再投其所好~千人千面。

1.根据用户的历史行为,看出一个用户的性别、年龄、爱好……。上述数据,很多公司共享(俩个程序,两个账号,咋知道这是一个人?现在的程序登录入口,就俩,一个微信一个手机号)。通过上述过程,搜集到用户的特征,就会转换成标签(简短的字符串),此时就可以把标签保存到redis的set中

2.使用set计算用户间的共同好友

基于集合求交集

基于此还能做好友推荐

A和B是好友,A和C是好友,BCD是好友,所以系统会将D推荐给A

3.使用set统计UV

一个互联网产品,如何衡量用户量用户规模?主要指标就是两方面

PV、UV

PV是page view  UV是user view,用户每访问一次服务器就会产生一个pv,每个用户访问服务器都会产生一个uv,但是同一个用户访问多次,不会使得uv增加

uv按照用户去重,就是set做的

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

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

相关文章

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进:全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

JavaScript ---案例(统计字符出现次数)

统计字符出现次数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

深度学习之微积分预备知识点(2)

极限&#xff08;Limit&#xff09; 定义&#xff1a;表示某一点处函数趋近于某一特定值的过程&#xff0c;一般记为 极限是一种变化状态的描述&#xff0c;核心思想是无限靠近而永远不能到达 公式&#xff1a; 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

LabVIEW软件维护的内容是什么呢?

LabVIEW软件维护涉及多个方面&#xff0c;确保程序的正常运行和长期稳定性。维护内容包括以下几个方面&#xff1a; 1. Bug修复 在开发和运行过程中&#xff0c;可能会出现各种软件问题或缺陷&#xff08;bugs&#xff09;。维护工作之一就是识别这些问题并通过修复程序中的代…

uniapp child.onFieldChange is not a function

uni-forms // 所有子组件参与校验,使用 for 可以使用 awiatfor (let i in childrens) {const child childrens[i];let name realName(child.name);if (typeof child.onFieldChange function) {const result await child.onFieldChange(tempFormData[name]);if (result) {…

【网络】TCP/IP 五层网络模型:网络层

最核心的就是 IP 协议&#xff0c;是一个相当复杂的协议 TCP 详细展开讲解&#xff0c;是因为 TCP 确实在开发中非常关键&#xff0c;经常用到&#xff0c;IP 则不同&#xff0c;和普通程序猿联系比较浅。和专门开发网络的程序猿联系比较紧密&#xff08;开发路由器&#xff0…

Qt5详细安装教程(包含导入pycharm)

1.自行下载Qt 2.双击进行安装 3.设置完成后勾选接受&#xff0c;跳转下一步 4.可选择安装位置&#xff0c;比较习惯安装在D盘 5.根据需求勾选对应组件安装 6.安装完成后&#xff0c;打开pycharm&#xff0c;进入settings—>选择ExternalTools&#xff0c;根据以下步骤进行配…

【WEB】EZ_Host

1、 2、解答 http://8762a9b0-5aa3-49f8-b8d2-54e4cb0746cc.www.polarctf.com:8090/?hostlocalhost;lshttp://8762a9b0-5aa3-49f8-b8d2-54e4cb0746cc.www.polarctf.com:8090/?hostlocalhost;cat flag即可看到答案

数据中台系统产品原型RP原型Axure高保真交互原型 源文件分享

在数字化时代&#xff0c;数据已经成为企业最宝贵的资产之一。为了更好地管理和利用这些数据&#xff0c;这边为大家整理了一套数据中台Axure高保真原型。这套原型致力于为企业提供全方位的数据服务&#xff0c;助力企业实现数据驱动的创新发展。 下载及预览地址&#xff1a;h…

828华为云征文|Flexus云服务器X实例部署宝塔运维面板

本次华为云Flexus云服务器X实例部署宝塔运维面板教学&#xff0c;这次是推陈出新啊 之前的云耀云服务器L实例已经很不错了&#xff0c;大力赞叹华为云的 同时感谢华为云提供优惠卷&#xff0c;只能说白嫖真是太棒了 华为云近期正在筹办华为云828企业节活动&#xff0c;90款免…

java重点学习-设计模式

十三 设计模式 工厂模式&#xff1a;spring中使用&#xff08;目的是&#xff1a;解耦&#xff09; 1.简单工厂 所有的产品都共有一个工厂&#xff0c;如果新增产品&#xff0c;则需要修改代码&#xff0c;违反开闭原则是一种编程习惯&#xff0c;可以借鉴这种编程思路 2.工厂方…

嵌入式入门小工程

此代码基于s3c2440 1.点灯 //led.c void init_led(void) {unsigned int t;t GPBCON;t & ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON t; }void le…

一个基于Gin + Vue 开发前后端分离的微型进存销系统,专为小微企业量身定制

前言 在这个信息化高速发展的时代&#xff0c;企业管理软件的需求日益增长&#xff0c;然而市面上许多现有的管理系统要么过于复杂&#xff0c;不适合小型企业的快速的需求&#xff1b;要么价格高昂&#xff0c;让许多初创企业望而却步。 针对这些痛点&#xff0c;我们迫切需…

01-Mac OS系统如何下载安装Python解释器

目录 Mac安装Python的教程 mac下载并安装python解释器 如何下载和安装最新的python解释器 访问python.org&#xff08;受国内网速的影响&#xff0c;访问速度会比较慢&#xff0c;不过也可以去我博客的资源下载&#xff09; 打开历史发布版本页面 进入下载页 鼠标拖到页面…

ETCD学习使用

一、介绍 etcd&#xff08;分布式键值存储&#xff09;是一个开源的分布式系统工具&#xff0c;用于可靠地存储和提供键值对数据。etcd 通常通过 HTTP 或 gRPC 提供 API&#xff0c;允许应用程序通过简单的接口与其交互。由于其可靠性和稳定性&#xff0c;etcd 在构建可扩展、分…

【AI视频】AI虚拟主播制作网站推荐

一、什么是AI虚拟主播&#xff1f; AI虚拟主播是一种利用人工智能技术打造的虚拟主持人&#xff0c;也被称为数字虚拟主持人。它们通常是由人工智能技术和三维建模技术结合而成&#xff0c;可以在各种平台上进行主持工作&#xff0c;如新闻报道、电商直播、综艺娱乐等。 AI虚…

使用GPU 加速 Polars:高效解决大规模数据问题

Polars 最近新开发了一个可以支持 GPU 加速计算的执行引擎。这个引擎可以对超过 100GB 的数据进行交互式操作能。本文将详细讨论 Polars 中DF的概念、GPU 加速如何与 Polars DF协同工作&#xff0c;以及使用新的 CUDA 驱动执行引擎可能带来的性能提升。 Polars 核心概念 Polar…

JMeter 中使用 Gson 操作请求中的Boby参数

背景 使用org.json.JSONObject 转换&#xff0c;与原Body参数顺序发生变化&#xff0c;原因&#xff1a;JSONObject内部是用Hashmap来存储的&#xff0c;本质上是一个无序的键值对集合&#xff0c;不应依赖字段的添加顺序。 为解决org.json.JSONObject 输出顺序问题&#xff…

[图解]静态关系和动态关系

1 00:00:01,060 --> 00:00:04,370 首先我们来看静态关系和动态关系 2 00:00:06,160 --> 00:00:10,040 我们要尽量基于静态关系来建立动态关系 3 00:00:11,740 --> 00:00:13,740 不能够在没有这个的基础上 4 00:00:14,220 --> 00:00:17,370 没有这个的情况下就胡…

【JVM】垃圾回收机制|死亡对象的判断算法|垃圾回收算法

思维导图 目录 1.找到谁是垃圾 1&#xff09;引用计数&#xff08;不是JVM采取的方式&#xff0c;而是Python/PHP的方案&#xff09; 2&#xff09;可达性分析&#xff08;是JVM采用的方案&#xff09; 2.释放对应的内存的策略 1&#xff09;标记-清除&#xff08;并不实…