头图

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(整形数组)来存储。

图片

使用场景

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

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

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

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

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

常见的使用场景如下。

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

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

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

出招实战:共同好友

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

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

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

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

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

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

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

图片

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

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

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

往期推荐

[

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

](http://mp.weixin.qq.com/s?__biz=MzkzMDI1NjcyOQ==&mid=22475047...)

[

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

](http://mp.weixin.qq.com/s?__biz=MzkzMDI1NjcyOQ==&mid=22475047...)

[

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

](http://mp.weixin.qq.com/s?__biz=MzkzMDI1NjcyOQ==&mid=22475046...)

[

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

](http://mp.weixin.qq.com/s?__biz=MzkzMDI1NjcyOQ==&mid=22475044...)


码哥字节
2.2k 声望14.1k 粉丝