如何管理 Redis 中的集合

介绍

Redis是一个开源的内存密钥值数据存储库。 Sets在Redis中是存储在给定密钥上的字符串的集合。

本教程解释了如何创建集,获取和删除成员,并比较不同集的成员。

如何使用此指南

这个指南是写成一个骗局的表,包含自含的示例,我们鼓励你跳到任何与你试图完成的任务相关的部分。

在本指南中显示的命令在运行 Redis 版本 6.0.1 版本的 Ubuntu 22.04 服务器上进行了测试。 要设置类似的环境,您可以遵循我们指南中的 Step 1How To Install and Secure Redis on Ubuntu 22.04 上进行测试。 我们将通过使用 Redis 命令行接口的 redis-cli 来演示这些命令的行为。 如果您使用不同的 Redis 接口 - 例如 - 某些命令的准确输出可能会有所不同。

或者,您可以提供一个管理的 Redis 数据库实例来测试这些命令,但请注意,根据数据库提供商允许的控制级别,本指南中的一些命令可能无法按所述方式工作。 要提供 DigitalOcean 管理数据库,请遵循我们的 管理数据库产品文档

创建套件

sadd命令允许您创建一个集合并添加一个或多个成员,下面的示例将以名为key_horror的键创建一个集合,其成员为FrankensteinGodzilla:

1sadd key_horror "Frankenstein" "Godzilla"

如果成功,‘sadd’将返回一个整数,显示该组增加了多少成员:

1[secondary_label Output]
2(integer) 2

如果您尝试将集合的成员添加到已持有非设置值的密钥中,则会返回错误. 该块中的第一个命令会创建一个名为 key_action列表 和一个元素, `"Shaft" :

1rpush key_action "Shaft"

下一个命令会尝试将设置成员Shane添加到列表中,但由于数据类型相碰撞,会产生错误:

1sadd key_action "Shane"
1[secondary_label Output]
2(error) WRONGTYPE Operation against a key holding the wrong kind of value

请注意,集不允许同一成员的多个发生:

1sadd key_comedy "It's" "A" "Mad" "Mad" "Mad" "Mad" "Mad" "World"
1[secondary_label Output]
2(integer) 4

虽然这个sadd命令指定了八个成员,但它丢弃了四个重复的Mad成员,结果为四个设置大小。

将成员从集合中恢复

在本节中,我们将审查一系列的Redis命令,这些命令会返回有关集中的成员的信息。 要练习描述的命令,请运行下面的命令,该命令将创建一个集合,其中有六个成员,以一个名为key_stooges的键:

1sadd key_stooges "Moe" "Larry" "Curly" "Shemp" "Joe" "Curly Joe"

若要从集合中返回每个成员,请运行分割命令,然后是您要检查的密钥:

1smembers key_stooges
1[secondary_label Output]
21) "Curly"
32) "Moe"
43) "Larry"
54) "Shemp"
65) "Curly Joe"
76) "Joe"

若要检查某个特定的值是否是集的一员,请使用sismember命令:

1sismember key_stooges "Harpo"

如果元素Harpokey_stooges集的一员,则sismember将返回1

1[secondary_label Output]
2(integer) 0

要确认某集中的成员数(换句话说,要找到某集的 cardinality),运行scard:

1scard key_stooges
1[secondary_label Output]
2(integer) 6

要返回一组随机元素,运行srandmember:

1srandmember key_stooges
1[secondary_label Output]
2"Larry"

若要从集合中返回多个随机、不同的元素,您可以按照srandmember命令返回您要获取的元素数量:

1srandmember key_stooges 3
1[secondary_label Output]
21) "Larry"
32) "Moe"
43) "Curly Joe"

如果您将负数传递给srandmember,该命令将允许返回相同的元素多次:

1srandmember key_stooges -3
1[secondary_label Output]
21) "Shemp"
32) "Curly Joe"
43) "Curly Joe"

在「srandmember」中使用的随机元素函数不是完全随机的,虽然在较大的数据集中其性能会有所改善。

将成员从集合中删除

Redis 配备了用于从集合中删除成员的三个命令:spop,sremsmove

spop 随机从集合中选择特定数量的成员,并返回它们,类似于srandmember,然后从集合中删除它们. 它接受包含集合的密钥名称和从集合中删除的成员数量作为参数。

以下示例命令将从上一节创建的 key_stooges 集中删除并返回两个随机选择的元素:

1spop key_stooges 2
1[secondary_label Output]
21) "Shemp"
32) "Larry"

srem允许您从集合中删除一个或多个特定的成员,而不是随机的成员:

1srem key_stooges "Joe" "Curly Joe"

而不是返回从集合中删除的成员,‘srem’返回一个代表了删除的成员数量的整数:

1[secondary_label Output]
2(integer) 2

使用smove将会员从一组移动到另一组. 此命令将源组、目标组和会员以此顺序接受为参数。

1smove key_stooges key_jambands "Moe"

如果命令成功地移动成员,它将返回 (integer) 1:

1[secondary_label Output]
2(integer) 1

如果smove失败,则会返回(整数) 0。 请注意,如果目标密钥尚未存在,则smove会在将成员移动到它之前创建它。

参数比较

Redis 还提供了一些命令,可以找到集之间的差异和相似之处. 为了展示这些集的工作方式,本节将引用名为总统国王蝙蝠侠的三个集。

1sadd presidents "George" "John" "Thomas" "James"
2sadd kings "Edward" "Henry" "John" "James" "George"
3sadd beatles "John" "George" "Paul" "Ringo"

sinter比较不同的集,并返回每个集中出现的 _set 交叉点或值:

1sinter presidents kings beatles
1[secondary_label Output]
21) "John"
32) "George"

sinterstore 执行类似的功能,但而不是返回交叉成员,它会在指定的目的地创建一个新的集合,其中包含这些交叉成员。

1sinterstore new_set presidents kings beatles
2smembers new_set
1[secondary_label Output]
21) "John"
32) "George"

sdiff 返回由第一个指定的集合与下列集合中的每一个集合的差异产生的 set difference 成员:

1sdiff presidents kings beatles
1[secondary_label Output]
21) "Thomas"

sdiff评估了第一个给定的集中的每个成员,然后将其与每个连续集中的成员进行比较。

sdiffstore执行类似于sdiff的函数,但而不是返回设置差异,它在给定的目的地创建了一个新的集,其中包含了设置差异:

1sdiffstore new_set beatles kings presidents
2smembers new_set
1[secondary_label Output]
21) "Paul"
32) "Ringo"

sinterstore一样,sdiffstore将重写目标密钥,如果它已经存在。

sunion返回_set union_,或包含您指定的每个集中的每个成员的集合:

1sunion presidents kings beatles
1[secondary_label Output]
21) "Thomas"
32) "George"
43) "Paul"
54) "Henry"
65) "James"
76) "Edward"
87) "John"
98) "Ringo"

sunion将结果视为一个新的集合,因为它只允许任何一个成员发生一次。

’sunionstore’ 执行类似的函数,但创建一个新的集合,该集合在给定目的地中包含组合,而不是返回结果:

1sunionstore new_set presidents kings beatles
1[secondary_label Output]
2(integer) 8

sinterstoresdiffstore一样,sunionstore将重写目标密钥,如果它已经存在。

结论

本指南详细介绍了在 Redis 中创建和管理集的若干命令. 如果在本指南中您想要了解的其他相关命令、论点或程序,请在评论中询问或提出建议。

有关 Redis 命令的更多信息,请参阅我们的教程系列 如何管理 Redis 数据库

Published At
Categories with 技术
comments powered by Disqus