Redis学习笔记之集合

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis学习笔记之集合

集合(set)类型也是用来保存多个字符串成员,但和列表类型不一样的是,集合中不允许有重复成员,并且集合中的成员是无序的,不能通过索引下标获取成员,一个集合最多可以存储2的32次方减1个成员。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。

1. 集合内操作

(1) 添加成员

sadd key member [member ...]

返回结果为添加成功的成员个数,例如:

192.168.211.131:7001> sadd set:1 1 2 3 4
(integer) 4

(2) 删除成员

srem key member [member ...]

返回结果为删除成员个数,例如:

192.168.211.131:7004> srem set:1 4
(integer) 1

(3) 计算成员个数

scard key

scard的时间复杂度为O(1),它不会遍历集合所有成员,而是直接用redis内部的变量,例如:

192.168.211.131:7004> scard set:1
(integer) 3

(4) 判断成员是否在集合中

sismember key member

如果给定成员在集合内返回1,反之返回0,例如

192.168.211.131:7004> sismember set:1 2
(integer) 1
192.168.211.131:7004> sismember set:1 4
(integer) 0

(5) 随机从集合返回指定个数成员

192.168.211.131:7004> srandmember set:1

"3"

192.168.211.131:7002> srandmember set:1 2
1) "1"
2) "2"

(6) 从集合随机弹出成员

spop key [count]

spop操作可以从集合中随机弹出成员,个数由count指定,例如下面代码是一次spop后,集合成员变为0、1、3、4、6、7、8:

192.168.211.131:7004> spop set:1 3
1) "9"
2) "5"
3) "2"
192.168.211.131:7004> smembers set:1
1) "0"
2) "1"
3) "3"
4) "4"
5) "6"
6) "7"
7) "8"

(7) 获取所有成员

smembers key

下面代码获取集合set:1所有成员,并且返回结果是无序的:

192.168.211.131:7004> smembers set:1
1) "0"
2) "1"
3) "3"
4) "4"
5) "6"
6) "7"
7) "8"

2. 集合间操作

现在有2个集合set:1和set:2,

set:1:0 1 3 4 6 7 8
set:2:0 1 3 5 7

(1) 求多个集合的交集

sinter key [key ...]

下面是求set:1和set:2两个集合的交集:

192.168.211.131:6379> sinter set:1 set:2
1) "0"
2) "1"
3) "3"
4) "7"

(2) 求多个集合的并集

sunion key [key ...]

下面是求set:1和set:2两个集合的并集:

192.168.211.131:6379> sunion set:1 set:2
1) "0"
2) "1"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"

(3) 求多个集合的差集

sdiff key [key ...]

下面是求set:1和set:2两个集合的差集:

192.168.211.131:6379> sdiff set:1 set:2
1) "4"
2) "6"
3) "8"

(4) 将交集、并集、差集的结果保存

sinterstore destination key [key ...]
sunionstore destination key [key ...]
sdiffstore destination key [key ...]

集合间的运算在成员较多的情况下会比较耗时,索引redis提供了上面三个命令(原命令+store)将集合间交集、并集、差集的结果保存在destination key中,例如下面操作将set:1和set:2两个集合的交集保存在set:1_2:inter中,set:1_2:inter本身也是集合类型:

192.168.211.131:6379> sinterstore set:1_2:inter >set:1 set:2
(integer) 4
192.168.211.131:6379> smembers set:1_2:inter
1) "0"
2) "1"
3) "3"
4) "7"

相关文章
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
333 5
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
132 5
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
177 1
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
699 0
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
204 0
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
1740 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
1380 3
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
196 3
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
136 3
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
309 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
下一篇
oss云网关配置