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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis从头学-7】Redis中的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平台为例或者王者荣耀中的赛季标签等等。


70da31399c5a3af72a93746c719a9063_4db2999151f04e3b8fe2b549c96eeb6d.jpeg


代码示例

利用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]


共同关注、专属粉丝


生活中的例子

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


28af8e0425e0cb69c31d98c598e7daf9_71c6c9ed22d04f53b2cbf787c2d64664.png


代码示例

通过其差集、交集、并集来实现集合间的运算命令来实现共同关注、专属粉丝等功能,以及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数据类型的应用,实际场景的逻辑根据具体需求而定。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论或者有什么其他场景也可以在评论区提出。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
监控 NoSQL Java
场景题:百万数据插入Redis有哪些实现方案?
场景题:百万数据插入Redis有哪些实现方案?
60 1
场景题:百万数据插入Redis有哪些实现方案?
|
1月前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
178 85
|
6天前
|
缓存 NoSQL 架构师
Redis批量查询的四种技巧,应对高并发场景的利器!
在高并发场景下,巧妙地利用缓存批量查询技巧能够显著提高系统性能。 在笔者看来,熟练掌握细粒度的缓存使用是每位架构师必备的技能。因此,在本文中,我们将深入探讨 Redis 中批量查询的一些技巧,希望能够给你带来一些启发。
61 23
Redis批量查询的四种技巧,应对高并发场景的利器!
|
3月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
53 5
|
1月前
|
存储 NoSQL Redis
redis常见数据类型
Redis 是一种基于内存的键值存储数据库,支持字符串、哈希表、列表、集合及有序集合等多种数据类型,每种类型均有特定用途与适用场景,提供丰富的命令操作,适用于高速数据访问与处理。
54 5
|
2月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
90 8
|
2月前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
53 1
|
2月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
61 3
|
3月前
|
存储 NoSQL 关系型数据库
Redis 有序集合(sorted set)
10月更文挑战第17天
154 4
|
10天前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应