Redis里查集合数据其实没那么复杂,教你几招简单又实用的方法快速搞定查询
- 问答
- 2025-12-24 10:54:53
- 2
综合自网络技术社区分享和Redis官方文档的通俗化解读)
你是不是一听到“Redis”、“集合”、“查询”这些词,就觉得头大,感觉是那些高级程序员才玩得转的东西?别怕,今天咱们就把它那层神秘的面纱给扯下来,在Redis里查看集合(Set)类型的数据,比你想象的要简单得多,根本用不着死记硬背一堆复杂命令,你就把它想象成一个充满了各种宝贝的“魔法袋子”,我们只需要学会几个简单的“咒语”,就能轻松知道里面有什么。
我们得先搞清楚,我们说的这个“集合”到底是什么,在Redis里,集合就是一个放东西的容器,它有两个特别好的特点:第一,里面装的东西都是唯一的,同一个东西你放进去一百遍,它也只会存在一个;第二,里面的东西是没有顺序的,不像排队一样有先来后到,你可以把一个网站的所有用户标签存成一个集合,把一篇文章的所有点赞用户ID也存成一个集合。
好了,基础知识铺垫完毕,接下来就是实战环节,教你几招最常用、最实在的查询方法。
第一招:看家本领,查看全部家当——SMEMBERS命令
这是最直接、最暴力的一招,当你想知道这个“魔法袋子”里到底装了哪些宝贝,一个不落全都看清楚的时候,就用它。
命令长这样:SMEMBERS key_name

比如说,你有一个集合,名字叫 favorite_fruits,里面存放了你最喜欢的水果,你只需要在Redis客户端(比如命令行工具)里输入 SMEMBERS favorite_fruits,Redis就会一下子把里面所有的水果名字都列出来给你看,比如可能是 “apple”, “banana”, “orange”。
这招的优点是一目了然,非常适合在数据量不是特别巨大的时候(比如几百几千个成员)快速浏览全部内容,但要是你的集合里存了几十万个成员,用这个命令就得小心了,可能会让网络传输和客户端显示有点压力。
第二招:确认宝贝在不在——SISMEMBER命令
很多时候,我们并不需要知道袋子里所有东西,我们只关心某一样特定的宝贝在不在里面,这时候,就用这个“侦察兵”命令。
命令长这样:SISMEMBER key_name member

继续用水果集合的例子,你想确认“durian”(榴莲)是不是在你喜欢的水果清单里,你就输入 SISMEMBER favorite_fruits durian,Redis不会给你啰嗦,它会非常干脆地返回一个数字:如果返回 1,恭喜你,榴莲是你的菜;如果返回 0,那就说明这个集合里没有榴莲。
这招的效率极高,无论你的集合有多大,它都能瞬间给你答案,特别适合在程序里做条件判断,比如检查用户是否有某个权限,文章是否被某个用户点赞过。
第三招:随机抽查,碰碰运气——SRANDMEMBER命令
这个命令特别有意思,它就像是你闭着眼睛从袋子里摸奖,随机抓一个或多个宝贝出来看看,这个功能在需要做随机推荐的场景下非常有用。
命令有两种用法:

SRANDMEMBER key_name:只随机返回一个成员。SRANDMEMBER key_name count:随机返回指定数量(count)的成员。
你想从喜欢的水果里随机挑一个今天吃,就输入 SRANDMEMBER favorite_fruits,可能这次摸到的是“apple”,下次就是“banana”,如果你想做个随机抽奖,从所有参与用户ID的集合里抽出3个幸运儿,就可以用 SRANDMEMBER lottery_users 3。
需要注意的是,当count是正数时,它会返回count个不重复的随机成员;当count是负数时,它可能会返回重复的成员。
第四招:数一数一共有多少宝贝——SCARD命令
这个命令最简单,它不关心内容是什么,只告诉你这个“魔法袋子”里总共有多少件宝贝,命令就是 SCARD key_name。
SCARD favorite_fruits 会返回一个数字,告诉你你一共喜欢几种水果,这个命令的速度也超级快,常用来做数据统计,比如统计一篇文章的总点赞数(点赞用户集合的大小)。
第五招:高级玩法,对比多个袋子——集合运算命令
这是最体现集合价值的一招,能让你同时操作多个集合,找出它们之间的关系,常用的有三个:
- SINTER:取交集,你有一个“喜欢篮球的用户”集合,一个“喜欢足球的用户”集合,用
SINTER users_basketball users_football就能找出既喜欢篮球又喜欢足球的“双料球迷”。 - SUNION:取并集,用
SUNION users_basketball users_football就能找出所有喜欢篮球或者喜欢足球的用户总和,重复的会自动去掉。 - SDIFF:取差集。
SDIFF users_basketball users_football会找出那些只喜欢篮球但不喜欢足球的用户。
你看,通过这些简单直白的命令,查询Redis集合的数据是不是一下子就变得清晰起来了?根本不需要去啃那些晦涩的概念,你只需要记住,SMEMBERS看全部,SISMEMBER查存在,SRANDMEMBER玩随机,SCARD数个数,SINTER/SUNION/SDIFF用来做集合间的比较,下次再遇到要查Redis集合的时候,大胆地用这几招去试试吧,你会发现原来搞定它就是这么简单!
本文由寇乐童于2025-12-24发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/67505.html
