千家信息网

NoSQL--Redis 2.4--Set

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,一、概述:1、在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂
千家信息网最后更新 2026年11月02日NoSQL--Redis 2.4--Set

一、概述:

1、在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。

2、和List类型不同的是,Set集合中不允许出现重复的元素,换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。

3、和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如交集、并集和差集。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。如qq好友推荐用的就是Set的交集。

例子:

tomFri集合:


linkenFri集合:


交集:


并集:


差集:


二、应用范围:

1、可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。

2、充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections命令就可以充分发挥它的方便和效率的优势了。


三、方法:

1、sadd方法:

SADD key member [member ...]

将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。

假如key不存在,则创建一个只包含member元素作成员的集合。

当key不是集合类型时,返回一个错误。


# 添加单个元素redis> SADD bbs "discuz.net"(integer) 1# 添加重复元素redis> SADD bbs "discuz.net"(integer) 0# 添加多个元素redis> SADD bbs "tianya.cn" "groups.google.com"(integer) 2redis> SMEMBERS bbs1) "discuz.net"2) "groups.google.com"3) "tianya.cn"

2、srem方法:


SREM key member [member ...]

移除集合key中的一个或多个member元素,不存在的member元素会被忽略。

当key不是集合类型,返回一个错误。

# 测试数据redis> SMEMBERS languages1) "c"2) "lisp"3) "python"4) "ruby"# 移除单个元素redis> SREM languages ruby(integer) 1# 移除不存在元素redis> SREM languages non-exists-language(integer) 0# 移除多个元素redis> SREM languages lisp python c(integer) 3redis> SMEMBERS languages(empty list or set)

3、smembers方法:

SMEMBERS key

返回集合key中的所有成员。

# 情况1:空集合redis> EXISTS not_exists_key    # 不存在的key视为空集合(integer) 0redis> SMEMBERS not_exists_key(empty list or set)# 情况2:非空集合redis> SADD programming_language python(integer) 1redis> SADD programming_language ruby(integer) 1redis> SADD programming_language c(integer) 1redis> SMEMBERS programming_language1) "c"2) "ruby"3) "python"

4、spop方法:

SPOP key

移除并返回集合中的一个随机元素(set为无序集合)。


redis> SMEMBERS my_sites1) "huangz.51cto.com"2) "sideeffect.me"3) "douban.com"redis> SPOP my_sites"huangz.51cto.com"redis> SMEMBERS my_sites1) "sideeffect.me"2) "douban.com"

5、sdiff方法:


SDIFF key [key ...]

返回一个集合的全部成员,该集合是所有给定集合的差集,以先写的集合为标准。

不存在的key被视为空集。


redis> SMEMBERS myset11) "one"2) "two"redis> SMEMBERS myset21) "two"2) "three"redis> SDIFF myset1 myset21) "one"redis> SDIFF myset2 myset11) "three"

6、sdiffstore方法:


SDIFFSTORE destination key [key ...]

此命令等同于SDIFF,但它将结果保存到destination集合,而不是简单地返回结果集。

如果destination集合已经存在,则将其覆盖。

destination可以是key本身。


redis> SMEMBERS myset11) "one"2) "two"redis> SMEMBERS myset21) "two"2) "three"redis> SDIFFSTORE myset3 myset1 myset21) "one"redis> SMEMBERS myset31) "one"


7、sinter方法:

SINTER key [key ...]

返回一个集合的全部成员,该集合是所有给定集合的交集。

不存在的key被视为空集。

当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

redis> SMEMBERS myset11) "one"2) "two"redis> SMEMBERS myset21) "two"2) "three"redis> SINTER myset1 myset21) "two"

8、sinterstore方法:

SINTERSTORE destination key [key ...]

此命令等同于SINTER,但它将结果保存到destination集合,而不是简单地返回结果集。

如果destination集合已经存在,则将其覆盖。

destination可以是key本身。


redis> SMEMBERS myset11) "one"2) "two"redis> SMEMBERS myset21) "two"2) "three"redis> SINTERSTORE myset3 myset1 myset2redis> SMEMBERS myset31) "two"

9、sunion方法:


SUNION key [key ...]

返回一个集合的全部成员,该集合是所有给定集合的并集。

不存在的key被视为空集。


redis> SMEMBERS myset11) "one"2) "two"redis> SMEMBERS myset21) "two"2) "three"redis> SUNION  myset1 myset21) "two"2) "three"3) "one"

10、sunionstore方法:


SUNIONSTORE destination key [key ...]

此命令等同于SUNION,但它将结果保存到destination集合,而不是简单地返回结果集。

如果destination已经存在,则将其覆盖。

destination可以是key本身。

redis> SMEMBERS myset11) "one"2) "two"redis> SMEMBERS myset21) "two"2) "three"redis> SUNIONSTORE myset3  myset1 myset2redis> SMEMBERS myset31) "two"2) "three"3) "one"

11、smove方法:

SMOVE source destination member

将member元素从source集合移动到destination集合。

SMOVE是原子性操作。

如果source集合不存在或不包含指定的member元素,则SMOVE命令不执行任何操作,仅返回0。否则,member元素从source集合中被移除,并添加到destination集合中去。

当destination集合已经包含member元素时,SMOVE命令只是简单地将source集合中的member元素删除。

当source或destination不是集合类型时,返回一个错误。

redis> SMEMBERS songs1) "Billie Jean"2) "Believe Me"redis> SMEMBERS my_songs(empty list or set)redis> SMOVE songs my_songs "Believe Me"(integer) 1redis> SMEMBERS songs1) "Billie Jean"redis> SMEMBERS my_songs1) "Believe Me"

12、scard方法:

SCARD key

返回集合key中元素的数量。

redis> SMEMBERS tool1) "pc"2) "printer"3) "phone"redis> SCARD tool(integer) 3redis> SMEMBERS fake_set(empty list or set)redis> SCARD fake_set(integer) 0

13、sismember方法:

SISMEMBER key member

判断member元素是否是集合key的成员。

redis> SMEMBERS joe's_movies1) "hi, lady"2) "Fast Five"3) "2012"redis> SISMEMBER joe's_movies "bet man"(integer) 0redis> SISMEMBER joe's_movies "Fast Five"(integer) 1

14、srandmember方法:

SRANDMEMBER key返回集合中的一个随机元素。

该操作和SPOP相似,但SPOP将随机元素从集合中移除并返回,而SRANDMEMBER则仅仅返回随机元素,而不对集合进行任何改动。

redis> SMEMBERS joe's_movies1) "hi, lady"2) "Fast Five"3) "2012"redis> SRANDMEMBER joe's_movies"Fast Five"redis> SMEMBERS joe's_movies    # 集合中的元素不变1) "hi, lady"2) "Fast Five"3) "2012"



元素 方法 类型 结果 命令 数据 多个 成员 空集 交集 客户 差集 错误 服务 之间 单个 博客 唯一性 地址 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 互联网科技公司经营范围 深圳恒合互联网络科技有限公司 西安互联网科技 齐家互联网科技 海南购全球互联网科技 华脉科技工业互联网产品 中盈科技互联网信息有限公司 中国的互联网科技企业的崛起 南平创想时代互联网科技有限公司 宝灵互联网科技有限公司 宜昌元轩互联网科技有限公司 恒生互联网科技指数跳水 长沙茂晟互联网科技有限公司 山东子淼互联网科技有限公司 21世纪互联网科技成就 广东鹅鹅鹅互联网科技有限公司 广州智享互联网科技 黑龙江互联网科技公司 重庆科技产业互联网有哪些 没上市的科技互联网公司 互联网科技开发公司 中国互联网科技发展 互联网科技logo设计 沃里互联网科技 恒生科技互联网指数分析 新兴科技互联网创新大赛颁奖典礼 亳州好赞互联网科技有限公司 华夏恒生互联网科技013171 米泉互联网科技专业怎么样
0