【Redis从头学-7】Redis中的Set数据类型实战场景之用户画像去重、共同关注、专属粉丝

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:Redis从头学


在这里插入图片描述


文章目录

  • 🌟前言
  • 🌟Set数据类型分析
  • 🌟Set类型实战应用场景
    • 用户画像去重功能
      • 生活中的例子
      • 代码示例
    • 共同关注、专属粉丝
      • 生活中的例子
      • 代码示例
  • 🌟写在最后

🌟前言

之前的篇章对Redis的String、List、Hash数据类型已经做出了具体分析,并举例说明了其具体的实战场景本文就结合Set数据类型结构的特性,一起探讨其实战中的应用场景,并以社交平台中的引力签、共同关注好友、是否是某人的粉丝等等为例来展示set数据类型的特点。

🌟Set数据类型分析

Redis中的Set数据类型是一种无序、不重复的集合,它提供了高效的集合操作,例如添加、删除、判断元素是否存在等。下面对Redis Set数据类型进行一些分析:

  1. 无序性:Set中的元素是无序存储的,每次获取的顺序可能不同。这使得Set非常适合于存储不需要特定顺序的元素。
  2. 元素的唯一性:Set保证其中的元素都是唯一的,即不会存在重复的元素。当向Set中添加已经存在的元素时,新元素将被忽略。
  3. 高效的添加、删除和判断操作:Set提供了O(1)时间复杂度的添加、删除和判断元素是否存在的操作。这归功于Redis内部使用了哈希表来实现Set数据类型。
  4. 集合运算:Redis的Set数据类型支持集合运算,例如交集、并集、差集等操作。可以对多个Set进行集合运算,方便进行数据分析和处理。
  5. 存储大量的元素:Set可以存储大量的元素,并且在数量上没有明确的限制。这使得Set非常适用于需要存储和处理大型集合的场景。

🌟Set类型实战应用场景

Set常用于存储用户标签、好友列表、点赞列表、投票系统等场景。它可以快速判断元素是否存在,进行集合运算,满足各种实时数据处理的需求。

总而言之,Redis的Set数据类型提供了高效、灵活且功能强大的集合操作,适用于需要存储和处理无序且不重复元素的场景。它在实时数据分析、用户关系管理等方面具有广泛的应用。

用户画像去重功能

生活中的例子

比如说交友平台的用户标签,以Soul平台为例或者王者荣耀中的赛季标签等等。
在这里插入图片描述

代码示例

利用set数据类型无序且元素不可重复的特点。通过members API来取出所有的用户画像并自动的进行去重。

@Test
void userProfile(){
		BoundSetOperations operations=redisTemplate.boundSetOps("user:tagg:1");
		operations.add("car","student","rich","dog","dog");
		Set<String> set=operations.members();
		System.out.println("此用户画像为"+set);
}

运行结果:
此用户画像为[car, dog, rich, student]

共同关注、专属粉丝

生活中的例子

类似于抖音或者小红书上经常会在推荐或者可能认识的人中,会有灰色字体提示你们共同关注、共同好友、是否是你粉丝等等。
在这里插入图片描述

代码示例

通过其差集、交集、并集来实现集合间的运算命令来实现共同关注、专属粉丝等功能,以及isMember来判断是否是某人的粉丝。

@Test
	void testSocial(){
		BoundSetOperations lzOperations=redisTemplate.boundSetOps("user:lz");
		lzOperations.add("A","B","C","E");
		System.out.println("老甄的粉丝"+lzOperations.members());

		BoundSetOperations llOperations=redisTemplate.boundSetOps("user:ll");
		llOperations.add("A","F","C","E");
		System.out.println("老李的粉丝"+llOperations.members());
		//差集
		Set lz=lzOperations.diff("user:ll");
		System.out.println("老甄专属粉丝"+lz);
		Set ll=llOperations.diff("user:lz");
		System.out.println("老李专属粉丝"+ll);
		//交集
		Set interSet=lzOperations.intersect("user:ll");
		System.out.println("同时关注"+interSet);
		//并集
		Set unionSet=lzOperations.union("user:ll");
		System.out.println("两个人的并集"+unionSet);
		//是否是某人粉丝
		boolean flag=lzOperations.isMember("A");
		System.out.println("A是否是老甄的粉丝"+flag);
}

运行结果:
老甄的粉丝[A, C, E, B]
老李的粉丝[A, C, E, F]
老甄专属粉丝[B]
老李专属粉丝[F]
同时关注[A, C, E]
两个人的并集[C, F, E, B, A]
A是否是老甄的粉丝true

🌟写在最后

有关于Redis中的Set数据类型实战应用场景到此就结束了。功能演示代码的逻辑简单,目的是理解Set数据类型的应用,实际场景的逻辑根据具体需求而定。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论或者有什么其他场景也可以在评论区提出。


请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

春秋云镜 CVE-2019-2725

春秋云镜 CVE-2019-2725 Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞 靶标介绍 Oracle Fusion Middleware&#xff08;子组件&#xff1a;Web Services&#xff09;的 Oracle WebLogic Server 组件中的漏洞。受影响的受支持版本为 10.3.6.0.0 和 12.1.3.0.0。…

Python爬虫实战案例——第一例

X卢小说登录(包括验证码处理) 地址&#xff1a;aHR0cHM6Ly91LmZhbG9vLmNvbS9yZWdpc3QvbG9naW4uYXNweA 打开页面直接进行分析 任意输入用户名密码及验证码之后可以看到抓到的包中传输的数据明显需要的是txtPwd进行加密分析。按ctrlshiftf进行搜索。 定位来到源代码中断点进行调…

python 开发环境(PyCharm)搭建指南

Python 的下载并安装 参考&#xff1a;Python基础教程——搭建Python编程环境 下载 Python Python 下载地址&#xff1a;官网 &#xff08;1&#xff09;点击【Downloads】>>>点击【Windows】>>>点击【Python 3.x.x】下载最新版 Python&#xff1b; Pyt…

resource doesn‘t have a corresponding Go package.

resource doesnt have a corresponding Go package. GO这个鬼东西不能直接放src下。 ************ Building Go project: ProjectGoTest ************with GOPATH: D:\Go;D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\ProjectGoTest >> Running: D:\Go\bin\go.exe …

SNAT和DNAT

SNAT和DNAT 一、SNAT策略及应用1.1SNAT策略概述1.2开启SNAT的命令1.2.1 临时打开1.2.2永久打开 1.3SNAT转换1&#xff1a;固定的公网IP地址1.4SNAT转换2&#xff1a;非固定的公网IP地址&#xff08;共享动态IP地址&#xff09;1.5SNAT案例1.5.1实验准备1.5.2配置网关服务器&…

(数字图像处理MATLAB+Python)第十章图像分割-第三,四节:区域分割和基于聚类的图像分割

文章目录 一&#xff1a;区域分割&#xff08;1&#xff09;区域生长A&#xff1a;原理B&#xff1a;示例C&#xff1a;程序 &#xff08;2&#xff09;区域合并A&#xff1a;原理B&#xff1a;示例C&#xff1a;程序 &#xff08;3&#xff09;区域分裂A&#xff1a;原理B&…

二叉树的遍历

二叉树的遍历 关于二叉树的遍历方式&#xff0c;要知道二叉树遍历的基本方式都有哪些。二叉树主要有两种遍历方式&#xff1a; 深度优先遍历&#xff1a;先往深走&#xff0c;遇到叶子节点再往回走。 前序遍历&#xff08;递归法&#xff0c;迭代法&#xff09;中序遍历&#…

tailscale使用教程(远程连接服务器)

tailscale&#xff1a;将多个设备放在同一局域网下&#xff0c;实现异地组网。 首先进入tailscale官网&#xff0c;根据系统需求进行下载 需要远程的设备和被远程的设备都需要下载。 然后两个设备均登录同一账号即可 注&#xff1a;这里重点讲一下linux操作系统上的操作&…

【3Ds Max】布料命令的简单使用

简介 在3ds Max中&#xff0c;"布料"&#xff08;Cloth&#xff09;是一种模拟技术&#xff0c;用于模拟物体的布料、织物或软体的行为&#xff0c;例如衣物、帆布等。通过应用布料模拟&#xff0c;您可以模拟出物体在重力、碰撞和其他外力作用下的变形和动态效果。…

Zookeeper集群单节点启动成功但未同步其他节点数据

首先排查节点启动是否正常&#xff1a; 在zookeeper的bin目录下执行&#xff1a;sh zkServer.sh status 判断当前节点数据leader 还是follower 节点都启动正常&#xff0c;但某一个zookeeper集群节点&#xff08;下面简称“异常节点”&#xff09;不同步其他节点数据&#xf…

7. CSS(四)

目录 一、浮动 &#xff08;一&#xff09;传统网页布局的三种方式 &#xff08;二&#xff09;标准流&#xff08;普通流/文档流&#xff09; &#xff08;三&#xff09;为什么需要浮动&#xff1f; &#xff08;四&#xff09;什么是浮动 &#xff08;五&#xff09;浮…

CTFhub-sql-整数注入

常用函数&#xff1a;version()、database()、user() 判断存在 sqli 注入 1 1 and 11 1 and 12 因为 11 为真&#xff0c;12 为假&#xff0c;且 11 与 1 显示的数据一样&#xff0c;那么就存在 sqli 注入 查询该数据表的字段数量 一、 2 3 1,2成功带出数据&#xff0c;3没…

Hadoop分布式计算与资源调度:打开专业江湖的魔幻之门

文章目录 版权声明一 分布式计算概述1.1 分布式计算1.2 分布式&#xff08;数据&#xff09;计算模式1.3 小结 二 MapReduce概述2.1 分布式计算框架 - MapReduce2.2 MapReduce执行原理2.3 小结 三 YARN概述3.1 YARN & MapReduce3.2 资源调度3.3 程序的资源调度3.4 YARN的资…

图像分割unet系列------TransUnet详解

图像分割unet系列------TransUnet详解 1、TransUnet结构2、我关心的问题3、总结与展望TransUnet发表于2021年,它是对UNet非常重要的改进,专为医学图像分割任务设计,特别用于在医学图像中分割器官或病变等解剖结构。 1、TransUnet结构 TransUNet在U-Net模型的基础上引入了混合…

【Matter】基于Ubuntu 22.04搭建matter开发环境:chip-tool 配网之 matter-over-wifi

前言 主要是记录一下学习过程&#xff0c;梳理下思路&#xff0c;抛转~ 官方的开发环境&#xff0c;基于Linux版本&#xff0c;官方的环境是基于树莓派环境的&#xff0c;原理其实也比较明了&#xff0c;目的也比较明确&#xff0c;就是达到Linux 主机和wifi 路由在同一局域网…

如何使用CSS实现一个全屏滚动效果(Fullpage Scroll)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现全屏滚动效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…

数据分析问答总结

一、SQL窗口函数 1.是什么 OLAP&#xff08;Online Anallytical Processing联机分析处理&#xff09;&#xff0c;对数据库数据进行实时分析处理。 2.基本语法&#xff1a; <窗口函数>OVER &#xff08;PARTITION BY <用于分组的列名> ORDER BY <用于排序的…

使用在 Web 浏览器中运行的 VSCode 实现 ROS2 测程法

一、说明 Hadabot是软件工程师学习ROS2和机器人技术的机器人套件。我们距离Hadabot套件的测试版还有一周左右的时间。我们将在本文末尾披露有关如何注册的更多信息。 新的Hadabot套件完全支持ROS2。除了硬件套件外&#xff0c;Hadabot软件环境将主要基于Web浏览器&#xff0c;以…

macbook 加载模型报错:failed to load model

环境&#xff1a;macbook m1 conda python3.9 加载模型链接为&#xff1a;ggml-model-q4_0.bin 加载方式&#xff1a; from langchain.embeddings import LlamaCppEmbeddings embeddings LlamaCppEmbeddings(model_pathllama_path) 在linux上加载是正常的&#xff0c;但是…

读SQL学习指南(第3版)笔记02_数据类型

1. 命令行工具 1.1. mysql -u root -p; 1.2. mysql&#xff1e; show databases; 1.3. mysql&#xff1e; use sakila; 1.4. mysql&#xff1e; SELECT now(); 1.4.1. now()是MySQL的内建函数 1.4.2. 返回当前日期和时间 1.5. mysql&#xff1e; SELECT now() FROM dual…