Redis Sets 使用场景有哪些?如何实现共同好友?

Redis Sets 是什么?

Sets 的功能类似 Java 中的 HashSet,是通过散列表实现的,所以添加、删除、查找元素的时间复杂度是 O(1)。

Sets 是字符串类型的无序集合,集合中的元素是唯一的,不会出现重复的数据。

Java 的 HashSet 底层是用 HashMap 实现的,Sets 的底层数据结构是用散列表实现的,散列表的 key 存储的是 Sets 中元素的 value,散列表的 value 指向 NULL。

不同的是,当元素内容都是 64 位以内的十进制整数,并且元素个数不超过 set-max- intset-entries 配置的值(默认为 512)时,Sets 会使用更加省内存的 intset(整形数组)来存储。

f94a1b35cfc83bfa8fe3b98886b71b2e.png

使用场景

当你需要存储多个元素,并且要求不能出现重复数据,无须考虑元素的有序性时,可以使用 Sets。

Sets 还支持在集合之间做交集、并集、差集操作,例如统计如下场景中多个集合元素的聚合结果。

◎ 统计多个元素的共有数据(交集)。

◎ 对于两个集合,统计其中的一个独有元素(差集)。

◎ 统计多个集合的所有元素(并集)。

常见的使用场景如下。

◎ 社交软件中共同关注:通过交集实现。

◎ 每日新增关注数:对近两天的总注册用户量集合取差集。

◎ 打标签:你可以为自己收藏的每一篇文章打标签,例如微信收藏功能,这样可以快速地找到被添加了某个标签的所有文章。

出招实战:共同好友

三国天下有限公司开发了一款名为「三国恋」的社交 App,需要实现共同好友功能,这个场景就能通过交集来实现。

我们为每个用户创建一个 Sets 集合,将账号名作为集合的 key,集合 value 存储该账号的好友。如下命令构建刘备和曹操的好友集合。

SADD user:刘备 赵子龙 张飞 关羽 貂蝉
SADD user:曹操 貂蝉 夏侯惇 典韦 张辽

想要知道两个人的共同好友,也就是两个集合的交集,只需要使用 SINTERSTORE 命令。

SINTERSTORE user:曹刘好友 user:刘备 user:曹操

命令执行后,刘备与曹操两个集合的交集数据就存储到了 user:曹刘好友 集合中。接着使用 SMEMBERS 查看曹操与刘备的共同好友。

好家伙,他们都喜欢貂蝉,你喜不喜欢呢?
f80dd7881a6d5ed3a352ff4b2f692c03.png

大家好,我是码哥,可以叫我靓仔。最后,也向大家介绍下我的新书《Redis 高手心法》。本书基于 Redis 7.0 版本,将复杂的概念与实际案例相结合,以简洁、诙谐、幽默的方式揭示了Redis的精髓。本书不仅是学习 Redis 的必备指南,更是驾驭 Redis 强大功能的秘籍。

无论你是初学者还是经验丰富的开发者,都会在阅读本书的过程中得到启发与收获。如果你希望站在Redis的顶峰,那么《Redis高手心法》绝对是你不可或缺的利器!

今天的分享就到这,希望你有所收获。

往期推荐

Redis 7.0 深度探秘:List 数据结构原理与实战指南

面试官拷打:Redis 高可用篇章中面试最常见的 6 个问题!

一文讲透数据库与 Redis 缓存一致性问题

简单实用!利用Redis轻松实现高并发全局ID生成器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值