Redis学习笔记之集合

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 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
相关文章
|
3月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
71 1
|
3月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
63 0
|
3月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
70 0
|
3月前
|
存储 NoSQL 算法
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
29 0
|
3月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
36 0
|
3月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
45 0
|
3月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
200 0
|
1月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
30天前
|
缓存 NoSQL 关系型数据库
Redis学习总结
Redis学习总结
31 1
|
3月前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
62 1