Redis学习笔记之集合

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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"

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
15天前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
28 5
|
26天前
|
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时可能遇到的问题和解决方案。
79 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
5月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
81 1
|
22天前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
163 3
|
25天前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
22 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
28天前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
22 3
|
28天前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
24 3
|
28天前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
23 2
|
5月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
81 0
|
5月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
95 0