数据类型与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 (社交平台关系)
相关文章
|
6天前
|
SQL NoSQL Java
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
18 0
|
6天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
95 3
|
6天前
|
存储 C++ 容器
set容器一自定义数据类型指定排序规则讲解
set容器一自定义数据类型指定排序规则讲解
25 1
|
6天前
|
存储 NoSQL Java
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
61 0
|
9月前
|
存储 NoSQL Redis
无序集合的利器:深入了解 Redis 的 Set 数据类型
在现代的应用程序中,对于处理独特值、快速判断成员关系等需求,无序集合是一种重要的数据结构。Redis,作为一款高性能的内存数据库,提供了多种数据类型来满足不同的需求。在本文中,我们将着重介绍 Redis 的 Set 数据类型,探讨其特性、用法以及在实际应用中的优势。
125 0
|
6天前
|
API Python Windows
[已解决] openai.error.AuthenticationError: No API key provided. You can set your API key in code using
[已解决] openai.error.AuthenticationError: No API key provided. You can set your API key in code using
138 0
|
6天前
|
存储 算法 Java
【Java 集合框架API接口】Collection,List,Set,Map,Queue,Deque
【Java 集合框架API接口】Collection,List,Set,Map,Queue,Deque
|
6天前
|
NoSQL Redis 索引
⑤【Sorted Set】Redis常用数据类型: ZSet [使用手册]
⑤【Sorted Set】Redis常用数据类型: ZSet [使用手册]
113 0
|
6天前
|
NoSQL Redis
④【Set】Redis常用数据类型: Set [使用手册]
④【Set】Redis常用数据类型: Set [使用手册]
44 0
|
7月前
|
存储 索引 Python
python-tuple(元组)-set(集合)-list(列表)-dictionary(字典)和Python数据类型转换函数
python-tuple(元组)-set(集合)-list(列表)-dictionary(字典)和Python数据类型转换函数