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

🧑‍💻作者名称:DaenCode

🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。

😎人生感悟:尝尽人生百味,方知世间冷暖。

📖所属专栏:Redis从头学



文章目录

🌟前言

之前的篇章对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来取出所有的用户画像并自动的进行去重。

java 复制代码
@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来判断是否是某人的粉丝。

java 复制代码
@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数据类型的应用,实际场景的逻辑根据具体需求而定。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论或者有什么其他场景也可以在评论区提出。


相关推荐
烟雨归来42 分钟前
升级openssh后ORACLE RAC EM 安装失败处理
数据库·oracle
TDengine (老段)1 小时前
TDengine IDMP 应用场景:电动汽车
大数据·数据库·物联网·ai·时序数据库·iot·tdengine
BD_Marathon6 小时前
【Flink】部署模式
java·数据库·flink
csudata7 小时前
十年磨一剑,中启乘数CData数据库一体机重新定义企业级数据库解决方案
数据库·数据库开发
TDengine (老段)8 小时前
TDengine IDMP 应用场景:工业锅炉监控
大数据·数据库·物联网·信息可视化·时序数据库·tdengine
superlls9 小时前
(Redis)主从哨兵模式与集群模式
java·开发语言·redis
dreams_dream10 小时前
Django的Settings 配置文件详解
数据库·django·sqlite
叫我阿柒啊11 小时前
Java全栈工程师面试实战:从基础到微服务的深度解析
java·redis·微服务·node.js·vue3·全栈开发·电商平台
颜如玉11 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源
遇见你的雩风11 小时前
【MySQL】CRUD基础详解
数据库·mysql