Redis集合数据快速查看和深入理解,轻松上手不复杂
- 问答
- 2025-12-29 18:22:03
- 4
今天咱们来聊聊Redis里的集合,就是一种叫Set的数据类型,你完全可以把它想象成一个袋子,但这个袋子很特别,里面装的东西都是唯一的,没有重复的,而且这些东西放进去的顺序是乱的,没有先来后到的说法,这个袋子能干很多实用的事儿,理解了它,你会发现解决某些问题变得特别简单。
(参考来源:Redis官方文档对Set数据类型的定义)
那这个“集合袋子”最基本的功能是什么呢?首先就是往里放东西,你可以创建一个叫“我的好友”的集合,然后把你的好友名字,张三”、“李四”、“王五”一个个放进去,Redis的命令很简单,用SADD命令就行,你不用担心重复添加同一个好友,因为这个袋子会自动去重,就算你加了两次“张三”,袋子里也只有一个“张三”。
(参考来源:Redis命令参考中的SADD命令)
光放进去还不够,我们得看看袋子里都有啥,这时候可以用SMEMBERS命令,你只要说“查看一下‘我的好友’这个袋子”,它就会把里面所有的名字都列出来给你看,不过要记住,就像刚才说的,顺序可能是随机的,这次看到的是“张三、李四、王五”,下次可能就是“王五、张三、李四”了,这一点和列表(List)很不一样,列表是会记录顺序的。
(参考来源:Redis命令参考中的SMEMBERS命令)
集合真正厉害的地方在于它能轻松处理多个集合之间的关系,比如说,你有一个“我的好友”集合,你的朋友也有一个“他的好友”集合,你想知道我们俩共同的好友是谁,也就是找两个集合的交集,该怎么做呢?用SINTER命令一下就搞定了,你只需要告诉Redis“请找出‘我的好友’和‘他的好友’这两个袋子里面都有的名字”,结果马上就出来了,这在业务上非常实用,比如社交网络里的共同关注,电商里的共同兴趣标签,用这个功能实现起来非常高效。
(参考来源:Redis命令参考中的SINTER命令)
有交集,自然也有并集,并集就是把两个或多个袋子里的所有东西合并到一起,然后自动去掉重复的,命令是SUNION,你想看看你和你的朋友所有的不重复的好友加起来有哪些,用这个命令最合适不过了。
(参考来源:Redis命令参考中的SUNION命令)

还有一种操作叫差集,命令是SDIFF,这个也挺有意思的。SDIFF 我的好友 他的好友这个命令的意思是,找出在“我的好友”这个袋子里有,但是在“他的好友”这个袋子里没有的人,这可以用来做推荐,可能认识的人”,其实就是找出你好友的好友中,你还没有添加的那个人。
(参考来源:Redis命令参考中的SDIFF命令)
除了这些集合之间的运算,Redis的集合还提供了一些很便捷的小功能,你想随机从袋子里抽一个名字出来,可以用SRANDMEMBER命令,它只是看看,不会把名字从袋子里拿走,如果你想像抽奖一样,抽出来就不放回去了,那就用SPOP命令,还有一个很常用的命令是SISMEMBER,你可以用它来检查某个人,赵六”,是不是在你的好友袋子里,它会返回一个是或者否的结果,用来判断成员是否存在非常快。
(参考来源:Redis命令参考中的SRANDMEMBER、SPOP、SISMEMBER命令)
这么有趣的“集合袋子”在现实世界里能用来做什么呢?其实应用场景非常多,第一个最典型的就是标签系统,比如一篇博客文章,它可以有“技术”、“Redis”、“数据库”等多个标签,每个标签都可以是一个集合,集合里存放着所有拥有这个标签的文章ID,这样一来,我想找同时属于“技术”和“Redis”的文章,只需要对这两个标签集合求个交集,文章ID列表就出来了,查询速度极快。

(参考来源:Redis实战案例中关于标签系统的应用)
第二个常见的用途就是社交关系,就像前面一直举的例子,存储用户的好友列表、粉丝列表,判断两个人是不是好友(用SISMEMBER),找共同好友(用SINTER)都非常方便。
第三个是抽奖、秒杀这样的场景,把所有参与抽奖的用户ID放进一个集合,因为集合自动去重,所以同一个用户无法重复参与,最后抽奖时,直接用SPOP命令随机弹出几个用户作为中奖者,公平又高效。
(参考来源:常见互联网业务场景中Redis Set的应用)
需要注意一点,当你的集合变得非常大的时候(比如里面有成百上千万个成员),使用像SMEMBERS这种会一次性返回所有成员的命令要小心,因为它可能会占用很多网络带宽和内存,在这种情况下,如果需要遍历大集合,可以考虑使用SSCAN命令,它可以分批次的获取数据,不会给服务器造成太大压力。
(参考来源:Redis官方文档中关于遍历大型集合的注意事项)
Redis的集合就是一个保证了元素唯一性、无序性,并且支持高效交叉并集等运算的容器,它不像列表那样讲究顺序,它的强大在于处理元素之间的关系和确保唯一性,只要你脑子里有了“唯一、无序的袋子”这个概念,再记几个简单的命令,就能在合适的场景下灵活运用它,大大简化你的开发工作,希望这个解释能让你对Redis集合有一个快速而清晰的认识。
本文由水靖荷于2025-12-29发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/70797.html
