数据类型与API(4)Set

简介: Set(集合)特点• 无序• 无重复• 集合间操作


Set(集合)



特点

  • 无序
  • 无重复
  • 集合间操作

常用命令

命令 含义 时间复杂度
sadd 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略 O(N), N 是被添加的元素的数量。
srem 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 O(N), N 为给定 member 元素的数量
smove 将 member 元素从 A 集合移动到 B 集合 O(1)
scard 集合中元素的数量 O(1)
sismember 判断 member 元素是否集合 key 的成员 O(1)
smembers 返回集合 key 中的所有成员 O(N),N 为集合的基数
srandmember 从集合中随机挑选指定数量元素返回 O(N),N 为返回数组的元素个数
spop 移除并返回集合中的一个随机元素 O(1)
sdiff、sdiffstore 给定集合之间的差集(将结果保存到新的集合) O(N),N 是所有给定集合的成员数量之和。
sinter、sinterstore 给定集合之间的交集(将结果保存到新的集合) O(N * M),N 为给定集合当中基数最小的集合,M 为给定集合的个数。
sunion、sunionstore 给定集合之间的并集(将结果保存到新的集合) O(N), N 是所有给定集合的成员数量之和


sadd、srem

  • sadd key element1 element2 ... (向集合key添加element(如果element已经存在,则添加失败))
  • srem key element1 element2 ... (移除key中的element元素)


scard、sismember、srandmember、smembers

  • scard key (计算集合大小)
  • sismember key element (判断element是否在集合中)
  • srandmember key count (从集合中随机挑选count个元素)
  • spop key(从集合中随机弹出一个元素)
  • smembers key(获取集合中所有元素)
127.0.0.1:6379> sadd setkey go c c++ c# php java python
(integer) 7
127.0.0.1:6379> sadd setkey go
(integer) 0
127.0.0.1:6379> sadd setkey matlab c
(integer) 1
127.0.0.1:6379> smembers setkey
1) "php"
2) "python"
3) "go"
4) "c++"
5) "matlab"
6) "java"
7) "c"
8) "c#"
127.0.0.1:6379> srem setkey c c++
(integer) 2
127.0.0.1:6379> smembers setkey
1) "matlab"
2) "java"
3) "c#"
4) "go"
5) "python"
6) "php"
127.0.0.1:6379> scard setkey
(integer) 6
127.0.0.1:6379> sismember setkey c++
(integer) 0
127.0.0.1:6379> sismember setkey php
(integer) 1
127.0.0.1:6379> srandmember setkey 3
1) "go"
2) "python"
3) "java"
127.0.0.1:6379> srandmember setkey 3
1) "go"
2) "java"
3) "c#"
127.0.0.1:6379> spop setkey
"matlab"
127.0.0.1:6379> spop setkey
"java"
127.0.0.1:6379> smembers setkey
1) "go"
2) "python"
3) "c#"
4) "php"
srandmember 和 spop: spop 从集合中弹出;srandmember 不会破坏集合


sdiff、sinter、sunion

  • sdiff setkey1 setkey2 (setkey1 setkey2的差集)
  • sinter setkey1 setkey2 (setkey1 setkey2的交集)
  • sunion setkey1 setkey2 (setkey1 setkey2的并集)
  • sdiff|sinter|suion + store destkey setkey1 setkey2 (将差集、交集、并集结果保存到destkey中)


标签

  • 给用户添加标签
sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag3 tag4 tag5
...
sadd user:n:tags tag1 tag3 tag5
  • 给标签添加用户
sadd tag:1:users user1 user3
sadd tag:2:users user3 user5 user6
...
sadd tag:n:users user1 user4


粉丝

  • 关注
127.0.0.1:6379> sadd user:1:follow 2 3 5 6 8 9
(integer) 6
127.0.0.1:6379> sadd user:2:follow 1 3 5 7 8 9
(integer) 6
  • 粉丝
127.0.0.1:6379> sadd user:1:fans 2 7 9
(integer) 3
  • 我关注他,他没关注我
127.0.0.1:6379> sdiff user:1:follow user:1:fans
1) "3"
2) "5"
3) "6"
4) "8"
  • 他关注我,我没关注他
127.0.0.1:6379> sdiff user:1:fans user:1:follow
1) "7"
  • 互粉
127.0.0.1:6379> sinter user:1:follow user:1:fans
1) "2"
2) "9"
127.0.0.1:6379> sinterstore user:1:mutual_fans user:1:follow user:1:fans
(integer) 2
127.0.0.1:6379> smembers user:1:mutual_fans
1) "2"
3) "9"
  • 共同关注
127.0.0.1:6379> sinter user:1:follow user:2:follow
1) "3"
2) "5"
3) "8"
4) "9"
  • 可能认识的人(用户1和用户2关注用户的并集)
127.0.0.1:6379> sunion user:1:follow user:2:follow
1) "1"
2) "2"
3) "3"
4) "5"
5) "6"
6) "7"
7) "8"
8) "9"


Tips

sadd = Tagging (标签)spop/srandmember = Random item (随机成员)sadd + sinter = Social Craph (社交平台关系)
相关文章
|
3月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
3月前
|
XML 缓存 API
【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.
【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.
|
4月前
|
NoSQL Redis
Redis set数据类型命令使用及应用场景使用总结
Redis set数据类型命令使用及应用场景使用总结
43 1
|
3月前
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型list&set()
本文介绍了Python中list和set两种数据类型的使用,包括它们的创建、取值、增删改查操作、排序以及内置函数的使用,还探讨了list的比较函数和set的快速去重功能。
29 0
|
4月前
|
消息中间件 JSON NoSQL
Redis深度解析:核心数据类型之hash、list、set
Redis深度解析:核心数据类型之hash、list、set
|
4月前
|
JavaScript API 索引
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
63 0
|
6月前
|
SQL NoSQL Java
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
56 0
|
6月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
150 3
|
6月前
|
存储 C++ 容器
set容器一自定义数据类型指定排序规则讲解
set容器一自定义数据类型指定排序规则讲解
169 1
|
存储 NoSQL Redis
无序集合的利器:深入了解 Redis 的 Set 数据类型
在现代的应用程序中,对于处理独特值、快速判断成员关系等需求,无序集合是一种重要的数据结构。Redis,作为一款高性能的内存数据库,提供了多种数据类型来满足不同的需求。在本文中,我们将着重介绍 Redis 的 Set 数据类型,探讨其特性、用法以及在实际应用中的优势。
190 0