Redis 集合(Sets) 复习

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 集合类似 Java 中的 HashSet,内部实现是一个 value 永远为 null 的 HashMap,实际就是通过计算hash的方式来快速排重的,这也是 set 能提供判断一个成员是否在集合内的原因。

介绍

集合类似 Java 中的 HashSet,内部实现是一个 value 永远为 null 的 HashMap,实际就是通过计算hash的方式来快速排重的,这也是 set 能提供判断一个成员是否在集合内的原因。

应用场景

redis 的 sets 类型是使用哈希表构造的,因此复杂度是 o(1),它支持集合内的增删改查,并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。比如计算网站独立ip,用户画像中的用户标签,共同好友等功能

命令大纲

新增(SADD)

添加一个&多个成员(SADD)

SADD key member [member ...]

返回值:被添加到集合中的新元素的数量,不包括被忽略的元素。

# SADD key member [member ...]
> SADD testsets zhangsan lisi wangwu zhaoliu zhangsan
(integer) 4
> sadd testsets1 chendasheng zhansi liwu wangliu
(integer) 4

查询(SCARD、SMEMBERS、SISMEMBER、SDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SUNION、SUNIONSTORE、SRANDMEMBER)

获取的成员数(SCARD)

SCARD key

返回值

集合的数量。 当集合 key 不存在时,返回 0 。

> SCARD testsets
(integer) 4

返回所有成员(SMEMBERS)

SMEMBERS key
> SMEMBERS testsets
1) "zhaoliu"
2) "wangwu"
3) "lisi"
4) "zhangsan"
> SMEMBERS testsets1
1) "wangliu"
2) "liwu"
3) "zhansi"
4) "chendasheng"

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

SISMEMBER key member

返回值

存在返回 1 不存在返回 0

> SISMEMBER testsets chendasheng
(integer) 0
> SISMEMBER testsets1 chendasheng
(integer) 1

查与其他集合的差异(SDIFF)【第一个与其它】

SDIFF key [key ...]

返回值

> SADD test1 1 2 3
> SADD test2 2 3 4
> SDIFF test1  test3
1) "1"
2) "2"

返回所有集合的差集存储在其他集合中(SDIFFSTORE)

# destination 储存的集合
SDIFFSTORE destination key [key ...]

返回值

> SDIFFSTORE test4 test1 test3
(integer) 2
> SMEMBERS test4
1) "1"
2) "2"

返回所有集合的交集(SINTER)

SINTER key [key ...]

返回值

> SINTER test1 test2
1) "2"
2) "3"

返回所有集合的交集存储在其他集合中(SINTERSTORE)

# destination 储存的集合
SINTERSTORE destination key [key ...]

返回值

> SINTERSTORE test5 test1 test4
(integer) 2
> SMEMBERS test5
1) "1"
2) "2"

返回所有集合的并集(SUNION)

SUNION key [key ...]

返回值

> SADD test1 1 2 3
> SADD test2 2 3 4
> SUNION test1 test2
1) "1"
2) "2"
3) "3"
4) "4"

返回所有集合的并集存储在其他集合中(SUNIONSTORE)

# destination 储存的集合
SUNIONSTORE destination key [key ...]

返回值

> SUNIONSTORE test6 test1 test2
(integer) 4
> SMEMBERS test6
1) "1"
2) "2"
3) "3"
4) "4"

返回集合中一个或多个随机数(SRANDMEMBER)

SRANDMEMBER key [count]

返回值

> SMEMBERS test6
1) "1"
2) "2"
3) "3"
4) "4"

删除

移除并返回集合中的一个或多个随机元素

SPOP key [count]

返回值

> SPOP test6 2
1) "2"
2) "1"
> SMEMBERS test6
1) "3"
2) "4"

移除集合中一个或多个成员

SREM key member [member ...]

返回值

> SREM test6 3 4
(integer) 2
> SMEMBERS test6
(empty array)

其他操作

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

SMOVE source destination member

返回值

> SMOVE test1 test2 1
(integer) 1
> SMEMBERS test1
1) "2"
2) "3"

迭代

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

返回值

参考字符串迭代

本文参考&引用

Redis 集合(Set) | 菜鸟教程

Set(集合) — Redis 命令参考

相关实践学习
基于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
目录
相关文章
|
存储 NoSQL API
【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知
【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知
|
2月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
40 5
|
2月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
29 3
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
28 2
|
3月前
|
存储 NoSQL Redis
6)深度解密 Redis 的集合(Set)
6)深度解密 Redis 的集合(Set)
56 1
|
4月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
6月前
|
缓存 NoSQL 安全
玩转Redis!非常强大的Redisson分布式集合,少写60%代码
Redisson是Java的Redis客户端,提供实时数据平台服务,简化了分布式环境下的数据管理。它包含RList、RSet、RMap等分布式集合,支持ConcurrentMap和Set接口,确保线程安全和数据一致性。例如,RMap实现了本地缓存和监听器功能,允许数据监听和本地加速读取。此外,还提供了RSet的排序和去重功能,以及RQueue和RBlockingQueue等队列实现,支持阻塞操作。通过Redisson,开发者能轻松处理分布式系统的数据同步和操作。
|
5月前
|
存储 NoSQL Java
Redis10------Set类型,存在着无序的特征存储的顺序和插入的顺序是无关的,set集合的一大特点是不可重复,在redis中支持交集插集等特殊功能,好友列表,共同关注等等
Redis10------Set类型,存在着无序的特征存储的顺序和插入的顺序是无关的,set集合的一大特点是不可重复,在redis中支持交集插集等特殊功能,好友列表,共同关注等等
|
6月前
|
存储 NoSQL Redis
Redis第七弹-Set与ZSET基本操作,Set(集合特点)SADD key member(注意这个key,必须是你自定义名字,不能用key)​编辑SMEMBERS key-查询所有的key
Redis第七弹-Set与ZSET基本操作,Set(集合特点)SADD key member(注意这个key,必须是你自定义名字,不能用key)​编辑SMEMBERS key-查询所有的key
|
6月前
|
NoSQL Java Redis
【Redis】 Java操作客户端命令——集合操作与有序集合操作
【Redis】 Java操作客户端命令——集合操作与有序集合操作