一、Redis概述
Redis概述
Set类型
Redis的Set结构与Java中的HashSet雷同,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet雷同的特性:
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
1 SADD:向集合(Set)中添加一个或多个成员
SADD 是 Redis 中用于向集合(Set)中添加一个或多个成员的下令。
- SADD key member [member ...]
复制代码
- key: 集合的键名。
- member: 要添加到集合中的一个或多个成员。
返回值
- redis> SADD myset "Hello"
- (integer) 1
- redis> SADD myset "World"
- (integer) 1
- redis> SADD myset "World"
- (integer) 0
复制代码 返回被添加到集合中的新成员的数量,不包括已经存在于集合中的成员。
行为说明
- 对于每个指定的成员,如果该成员不在集合中,则将其添加到集合中。
- 如果集合不存在,则会创建一个新的集合并添加指定的成员。
- 如果指定的成员已经是集合的成员,则该成员不会重复添加,操作不产生任何变化。
集合 myset,初始时是空集合。
执行后,集合变为 {"apple"},返回值是:1。
- 继续向集合 myset 中添加成员 "orange" 和 "banana":
执行后,集合变为 {"apple", "orange", "banana"},返回值是:2。因为 "orange" 和 "banana" 都是新添加的成员。
由于 "apple" 已经是集合 myset 的成员,不会重复添加,集合保持稳定。返回值是:0。
使用场景
- 集合操作:实用于必要管理独特成员集合的场景,例如存储用户的标签、记载已处置惩罚的使命等。
- 去重:用于确保集合中的元素是唯一的,制止重复数据的存在。
- 快速查找:集合支持快速的成员查找和操作,得当必要频繁查抄成员存在性的场景。
注意事项
- 集合中的成员是唯一的,重复添加同一成员不会导致集合内容重复。
- 如果集合不存在,Redis 会主动创建空集合并执行添加操作。
2 SCARD:获取集合(Set)中成员数量
SCARD 是 Redis 中用于获取集合(Set)中成员数量的下令。
返回值
- redis> SADD myset "Hello"
- (integer) 1
- redis> SADD myset "World"
- (integer) 1
- redis> SCARD myset
- (integer) 2
复制代码 返回集合中的成员数量。
行为说明
- 如果指定的键不存在,返回 0,表示空集合。
- 如果指定的键对应的值不是集合类型,会返回错误。
示例
假设集合 myset 中有 3 个成员,那么返回值就是:3。
假设集合 emptyset 是一个空集合,返回值就是:0。
注意事项
- 如果键对应的值不是集合类型,会返回错误,因此在使用 SCARD 下令前最好确认键对应的值确实是集合类型。
3 SDIFF:获取多个集合之间的差集
SDIFF 是 Redis 中用于获取多个集合之间的差集(差异)的下令。
- key: 要计算差集的集合键名,可以指定多个集合键名。
返回值
- redis> SADD key1 "a"
- (integer) 1
- redis> SADD key1 "b"
- (integer) 1
- redis> SADD key1 "c"
- (integer) 1
- redis> SADD key2 "c"
- (integer) 1
- redis> SADD key2 "d"
- (integer) 1
- redis> SADD key2 "e"
- (integer) 1
- redis> SDIFF key1 key2
- 1) "a"
- 2) "b"
复制代码 返回一个包含差集成员的列表,即第一个集合与其他集合之间的差异部分。
行为说明
- 对于给定的多个集合,计算它们之间的差集。
- 结果会合包含的是第一个集合与其他集合之间的差异部分,即第一个集合中存在,而其他集合中不存在的成员。
示例
两个集合 set1 和 set2
假设 set1 中有成员 {"a", "b", "c"},而 set2 中有成员 {"b", "c", "d"},那么执行上述下令后,返回值就是 {"a"},表示 set1 中存在而 set2 中不存在的成员。
Tips:
- 差集操作只能计算两个集合之间的差异,如果必要计算多个集合之间的差集,必要多次调用 SDIFF 下令。
- 如果指定的某个集合不存在,将视为空集合处置惩罚。
4 SDIFFSTORE:计算多个集合之间的差集,并将结果存储在指定的目标集合中
SDIFFSTORE 是 Redis 中用于计算多个集合之间的差集,并将结果存储在指定的目标集合中的下令。
- SDIFFSTORE destination key [key ...]
复制代码
- destination: 差集结果要存储的目标集合的键名。
- key: 要计算差集的一个或多个集合键名。
返回值
返回存储在目标集合中的成员数量。
行为说明
- 计算多个集合之间的差集(即第一个集合与其他集合之间的差异部分),并将差集结果存储在指定的目标集合中。
- 如果目标集合已经存在,它将被覆盖。
- 如果指定的某个集合不存在,将视为空集合处置惩罚。
示例
两个集合 set1 和 set2,分别包含一些成员,并且要将它们的差集存储到集合 resultSet 中。
- 计算 set1 与 set2 之间的差集,并将结果存储到 resultSet:
- SDIFFSTORE resultSet set1 set2
复制代码 假设 set1 中有成员 {"a", "b", "c"},而 set2 中有成员 {"b", "c", "d"},执行上述下令后,resultSet 将包含 {"a"},表示 set1 中存在而 set2 中不存在的成员。返回值是 1,表示结果会合有一个成员。
5 SMEMBERS:获取指定集合中所有成员
SMEMBERS 是 Redis 中用于获取指定集合中所有成员的下令。
返回值
- redis> SADD myset "Hello"
- (integer) 1
- redis> SADD myset "World"
- (integer) 1
- redis> SMEMBERS myset
- 1) "Hello"
- 2) "World"
复制代码 返回一个包含集合中所有成员的列表。
行为说明
- 返回指定集合中的所有成员。
- 如果集合不存在(被认为是一个空集合),则返回空列表。
- 结果会合的成员顺序不固定,因为它们是无序的。
示例
如果 myset 中有成员 {"member1", "member2", "member3"},那么执行上述下令后,将返回 {"member1", "member2", "member3"},即集合中的所有成员列表。
注意事项
- 对于大型集合,考虑成员数量可能会对性能产生影响,因此在处置惩罚大型数据时需谨慎使用。
- 集合中的成员顺序是无序的,因此不能依赖返回的顺序。
6 SISMEMBER:查抄指定成员是否存在于集合中
SISMEMBER 是 Redis 中用于查抄指定成员是否存在于集合中的下令。
- key: 要查抄的集合键名。
- member: 要查抄是否存在的成员。
返回值
- redis> SADD myset "one"
- (integer) 1
- redis> SISMEMBER myset "one"
- (integer) 1
- redis> SISMEMBER myset "two"
- (integer) 0
复制代码 返回布尔值:
- 1 表示成员存在于集合中。
- 0 表示成员不存在于集合中或者集合本身不存在。
行为说明
- 查抄指定成员是否存在于指定的集合中。
- 如果集合不存在,或者成员不在集合中,则返回 0。
- 如果成员存在于集合中,则返回 1。
示例
集合 myset,此中包含成员 {"member1", "member2", "member3"}:
- 查抄成员 "member1" 是否存在于集合 myset 中:
- SISMEMBER myset "member1"
复制代码 如果 "member1" 存在于 myset 中,该下令将返回 1。
- 查抄成员 "member4" 是否存在于集合 myset 中:
- SISMEMBER myset "member4"
复制代码 因为 "member4" 不在 myset 中,该下令将返回 0。
注意事项
- SISMEMBER 下令在集合不存在或成员不存在时都会返回 0,因此必要根据返回值来判断详细情况。
- 成员的存在性查抄是集合操作中的常见需求,因为 Redis 的集合数据结构支持高效的成员查找和检索。
7 SREM:从集合中移除一个或多个成员
SREM 是 Redis 中用于从集合中移除一个或多个成员的下令。
- SREM key member [member ...]
复制代码
- key: 要操作的集合键名。
- member [member ...]: 要从集合中移除的一个或多个成员。
返回值
- redis> SADD myset "one"
- (integer) 1
- redis> SADD myset "two"
- (integer) 1
- redis> SADD myset "three"
- (integer) 1
- redis> SREM myset "one"
- (integer) 1
- redis> SREM myset "four"
- (integer) 0
复制代码 返回被成功移除的成员数量,不包括不存在的成员。
行为说明
- 从指定集合中移除一个或多个成员。
- 如果成员在集合中不存在,则被忽略,不会报错。
- 如果集合在执行操作前不存在,则会被视为空集合处置惩罚。
示例
集合 myset,此中包含成员 {"member1", "member2", "member3"}:
- 移除单个成员 "member2":
执行后,集合 myset 中将只剩下 {"member1", "member3"}。
- 移除多个成员 "member1" 和 "member3":
- SREM myset "member1" "member3"
复制代码 执行后,集合 myset 将变为空集合。
- 尝试移除不存在的成员 "nonexistent":
因为 "nonexistent" 不在 myset 中,该下令不会产生任何影响,并返回 0。
注意事项
- SREM 操作是原子的,即在执行期间不会有其他客户端能够对同一集合进行操作。
- 虽然 SREM 对不存在的成员不会报错,但执行过程中会返回实际移除的成员数量。
8 SINTER:计算多个集合的交集
SINTER 是 Redis 中用于计算多个集合的交集的下令。
- key [key ...]: 一个或多个集合键名。
返回值
返回一个包含交集成员的列表。
行为说明
- 计算给定多个集合的交集。
- 如果此中一个或多个集合不存在,则返回空列表(空集合)。
- 结果会合的每个成员都是同时存在于所有输入集合中的成员。
示例
假设有两个集合 set1 和 set2:
- set1 中包含成员 {"member1", "member2", "member3"}。
- set2 中包含成员 {"member2", "member3", "member4"}。
计算它们的交集:
执行后,返回的结果将是 {"member2", "member3"},因为这两个成员是同时存在于 set1 和 set2 中。
注意事项
- 如果输入的集合中有一个或多个不存在,结果将是空集合。
- SINTER 下令返回的交集结果是一个新的集合,并不会修改输入的任何集合。
9 SMOVE:将一个成员从一个集合移动到另一个集合
SMOVE 是 Redis 中用于将一个成员从一个集合移动到另一个集合的下令。
- SMOVE source destination member
复制代码
- source: 源集合的键名。
- destination: 目标集合的键名。
- member: 要移动的成员。
返回值
返回整数值:
- 1:如果成员被成功移动。
- 0:如果成员未被移动,即成员不存在于源集合中或者成员已存在于目标集合中。
行为说明
- 如果源集合中存在该成员,则将其从源集合移除并添加到目标集合中。
- 如果目标集合中已经存在该成员,或者源集合中不存在该成员,则不会进行任何操作。
- 如果源集合和目标集合是同一集合,该下令相称于什么都不做,但会返回 0。
示例
两个集合 set1 和 set2:
- set1 中包含成员 {"member1", "member2", "member3"}。
- set2 中包含成员 {"member4", "member5"}。
移动成员 member2 从 set1 到 set2:
- SMOVE set1 set2 "member2"
复制代码 执行后:
- set1 将变成 {"member1", "member3"}。
- set2 将变成 {"member4", "member5", "member2"}。
- 返回值为 1。
尝试移动不存在的成员 member6 从 set1 到 set2:
- SMOVE set1 set2 "member6"
复制代码 执行后:
- set1 和 set2 保持稳定。
- 返回值为 0。
注意事项
- SMOVE 下令是原子的,下令执行过程中不会有其他客户端能够对这两个集合进行操作。
- 纵然源集合和目标集合是同一个集合,下令也不会报错,但返回 0。
更多的Set下令可以去官网https://redis.io/docs/latest/commands/?group=set检察哦~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |