10. Redis 五种数据类型-集合Set
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了10. Redis 五种数据类型-集合Set,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5508字,纯文字阅读大概需要8分钟。
内容图文
![10. Redis 五种数据类型-集合Set](/upload/InfoBanner/zyjiaocheng/893/bdc87ed035a04638b770d4d3b66a7331.jpg)
Redis 数据类型-Set
Redis 中的Set 数据结构存储的是一组无序且唯一的元素集合.
1. 常用命令
操作命令 | 描述 | 返回值 |
---|---|---|
smembers $key | 获取set中所有元素 | |
sadd $key member[member…] | 向set中添加多个元素,支持批量操作 | 如果key不存在,则自动创建集合.对已存在的member 会自行忽略,但不会报错.返回新增加的元素个数 |
srem $key member[member…] | 从集合中移除多个元素,支持批量操作 | 返回移除的元素个数, 如果集合为空或集合不存在则返回0 |
spop key[count] | 随机弹出集合中的一个或多个元素,默认弹出一个 | 返回移除的元素.当key不存在或集合为空时返回nil |
spop key[count] | 随机返回集合中的一个或多个元素,但不会移除 | 返回多个元素.当key不存在或集合为空时返回nil |
sismember $key $member | 判断member 是否是集合中的一员 | 如果是返回1,否则返回0 |
scard $key | 返回集合中的元素个数 | 正常返回集合元素个数,当key 不存在时返回0 |
srem $source $destination $member | 从源集合中移动元素到目标集合, 不支持批量操作 | 移动成功返回1,移动失败返回0 |
1.1 smembers
获取集合中所有元素,当集合中元素太多时,获取时间会有点儿长.
# 获取集合所有元素
127.0.0.1:6379> smembers chars
1) "b"
2) "d"
3) "c"
4) "a"
# 当key不存在或集合为空时,返回值
127.0.0.1:6379> smembers hh
(empty list or set)
1.2 sadd
向集合中添加多个元素,支持批量操作.对集合中已经存在的元素会自行忽略,以保证集合中的元素都是唯一的.
127.0.0.1:6379> smembers chars
1) "b"
2) "d"
3) "c"
4) "a"
# 向集合中插入两个新元素,所以返回2
127.0.0.1:6379> sadd chars a b e f
(integer) 2
# 查看集合中所有元素
127.0.0.1:6379> smembers chars
1) "e"
2) "f"
3) "a"
4) "d"
5) "b"
6) "c"
1.3 srem
从集合中删除多个元素,支持批量操作. 返回移除的元素个数, 如果集合为空或集合不存在则返回0
127.0.0.1:6379> srem chars a b c
(integer) 3
1.4 spop
随机弹出集合中的一个或多个元素,返回移除的元素.当key不存在或集合为空时返回nil.
# 集合所有元素
127.0.0.1:6379> smembers chars
1) "b"
2) "d"
3) "c"
4) "a"
5) "e"
# 随即返回1个元素
127.0.0.1:6379> spop chars
"b"
# 随机弹出多个元素
127.0.0.1:6379> spop chars 2
1) "a"
2) "d"
# 集合剩余元素
127.0.0.1:6379> smembers chars
1) "e"
2) "c"
1.5 srandmember
和spop 类似,随机返回集合中的一个或多个元素,默认返回一个. 不同与spop 的时,此命令只是返回不会移除.
127.0.0.1:6379> smembers chars
1) "b"
2) "d"
3) "c"
4) "a"
5) "e"
# 随机返回3个元素
127.0.0.1:6379> srandmember chars 3
1) "e"
2) "b"
3) "c"
127.0.0.1:6379> smembers chars
1) "b"
2) "d"
3) "c"
4) "a"
5) "e"
1.6 sismember
判断member 是否是集合中的一员, 如果是返回1,否则返回0.当key 不存在时返回0.
127.0.0.1:6379> sismember chars a
(integer) 1
127.0.0.1:6379> sismember chars 1
(integer) 0
1.7 scard
获取集合中的元素个数.
127.0.0.1:6379> scard chars
(integer) 5
1.8 smove
从源集合中移动元素到目标集合, 移动成功返回1,移动失败返回0; 不支持批量操作
127.0.0.1:6379> smembers chars
1) "e"
2) "a"
3) "d"
4) "b"
5) "c"
# 将chars 中的a 移动到 numbers 中, 移动成功返回1
127.0.0.1:6379> smove chars numbers a
(integer) 1
# 查看移动后的集合
127.0.0.1:6379> smembers chars
1) "e"
2) "d"
3) "b"
4) "c"
127.0.0.1:6379> smembers numbers
1) "a"
# 再次尝试移动, 移动失败,返回0.因为chars 中已经无元素a 了.
127.0.0.1:6379> smove chars numbers a
(integer) 0
2. 集合运算命令
不同集合之间集合拥有交,并,差的运算,相应地redis 也提供了这些命令.
操作命令 | 描述 | 返回值 |
---|---|---|
sdiff key[key…] | 计算集合之间的差集,可同时和多个集合进行差集计算 | 结果为源集合中不在所有相比集合中出现的元素. |
sdiffstore $destination key[key…] | 计算集合之间的差集,可同时和多个集合进行差集计算 | 将计算的差集结果保存为新的集合,返回新集合中的元素个数 |
union key[key…] | 计算集合之间的并集,可同时和多个集合进行并集计算 | 结果为所有集合中不重复的元素 |
unionstore $destination key[key…] | 计算集合之间的并集,可同时和多个集合进行并集计算 | 将计算的并集结果保存为新的集合,返回新集合中的元素个数 |
sinter key[key…] | 计算集合之间的交集,可同时和多个集合进行交集计算 | 结果为所有集合中共同的元素. |
sinterstore $destination key[key…] | 计算集合之间的交集,可同时和多个集合进行交集计算 | 将计算的交集结果保存为新的集合,返回新集合中的元素个数 |
2.1 sdiff
计算集合之间的差集,可同时和多个集合进行差集计算,结果为源集合中不在所有相比集合中出现的元素.
127.0.0.1:6379> sadd ch1 a b c
(integer) 3
127.0.0.1:6379> sadd ch2 b e f
(integer) 3
127.0.0.1:6379> sadd ch3 c e g
(integer) 3
# 计算与一个集合的差集
127.0.0.1:6379> sdiff ch1 ch2
1) "a"
2) "c"
# 计算与多个集合的差集,不在任何一集合中的元素
127.0.0.1:6379> sdiff ch1 ch2 ch3
1) "a"
2.2 sdiffstore
计算集合之间的差集, 和sdiff 类似. 只是sdiff 计算出的集合并未保存,而sdiffstore 可以将差集保存为新的集合.
# 计算集合ch1 与 ch2 的差集,并将差集保存到集合 diff:ch1:ch2
127.0.0.1:6379> sdiffstore diff:ch1:ch2 ch1 ch2
(integer) 2
127.0.0.1:6379> smembers diff:ch1:ch2
1) "a"
2) "c"
# 如果保存的集合已存在,则会将原来的集合覆盖
127.0.0.1:6379> smembers diff:ch1:ch2
1) "b"
2) "a"
2.3 sunion
计算集合之间的并集,支持多个集合同时合并.
127.0.0.1:6379> sunion ch1 ch2
1) "b"
2) "a"
3) "c"
4) "e"
5) "f"
2.4 sunionstore
计算集合之间的并集,并将结果保存为一个新的集合. 和sunion 类似.
127.0.0.1:6379> sunionstore union:ch1:ch2 ch1 ch2
(integer) 5
127.0.0.1:6379> smembers union:ch1:ch2
1) "b"
2) "a"
3) "c"
4) "e"
5) "f"
2.5 sinter
计算集合之间的交集,支持多个集合同时相交.
127.0.0.1:6379> sinter ch1 ch2
1) "b"
127.0.0.1:6379> sinter ch1 ch2 ch3
(empty list or set)
2.6 sinterstore
计算集合之间的交集,并将结果保存为一个信的集合, 支持多个集合同时相交.
127.0.0.1:6379> sinter ch1 ch2
1) "b"
127.0.0.1:6379> sinter ch1 ch2 ch3
(empty list or set)
3. 其它命令
SCAN 命令及其相关的 SSCAN, HSCAN 和 ZSCAN 命令都用于增量迭代一个集合元素。此命令并不常用
- SCAN 命令用于迭代当前数据库中的key集合。
- SSCAN 命令用于迭代SET集合中的元素。
- HSCAN 命令用于迭代Hash类型中的键值对。
- ZSCAN 命令用于迭代SortSet集合中的元素和元素对应的分值
内容总结
以上是互联网集市为您收集整理的10. Redis 五种数据类型-集合Set全部内容,希望文章能够帮你解决10. Redis 五种数据类型-集合Set所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。