如何在 Redis 中管理哈希值

介绍

Redis是一个开源的内存关键值数据存储库。Redis hash是一个代表字符串字段和字符串值之间的映射的数据类型。哈希可以包含许多字符串值对,并且设计不占用太多的空间,因此它们非常适合代表数据对象。

本教程将讨论如何在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 管理数据库,请遵循我们的 管理数据库产品文档

创建哈希

要创建一个哈希,运行hset命令. 此命令将哈希密钥的名称、字段字符串和相应的值字符串接受为参数:

1hset poet:Verlaine nationality French

<$>[注] 注: 在本示例和下列示例中,‘poet:Verlaine’是哈希密钥。 点,盘和列通常用于使多字密钥和字段更易读。

hset 返回 (整数) 1 如果指定的字段是新字段,并且值已正确设置:

1[secondary_label Output]
2(integer) 1

但是,如果您未能包含 hash 密钥的值、字段或名称,则hset会返回错误。

另外,请注意,如果已经存在的话,hset会重写哈希的内容:

1hset poet:Verlaine nationality Francais

如果该字段已经存在,并且其值已成功更新,则hset将返回(整数) 0:

1[secondary_label Output]
2(integer) 0

您也可以使用 'hsetnx' 将字段添加到哈希中,但它只会工作,如果该字段尚未存在. 如果指定字段已经存在,则 'hsetnx' 不会产生任何效果,并且会返回 '(整数) 0':

1hsetnx poet:Verlaine nationality French
1[secondary_label Output]
2(integer) 0

若要将多个字段/值对设置为给定的集,请使用hmset命令,然后使用相应的字段/值字符串:

1hmset poet:Verlaine born 1844 died 1896 genre Decadent

hmset将返回OK,如果成功。

从 Hashes 获取信息

您可以通过hexists命令确定一个字段是否存在给定的哈希:

1hexists poet:Verlaine nationality

hexists将返回(integer) 1,如果该字段确实存在,如果没有,则返回(integer) 0

若要返回字段的值,请运行hget命令,然后是哈希密钥和您要检索的值的字段:

1hget poet:Verlaine nationality
1[secondary_label Output]
2"Francais"

「hmget」使用相同的语法,但可以返回多个字段的值:

1hmget poet:Verlaine born died
1[secondary_label Output]
21) "1844"
32) "1896"

如果您转移到hgethmget的哈希不存在,那么两个命令都会返回(nil):

1hmget poet:Dickinson born died
1[secondary_label Output]
21) (nil)
32) (nil)

要获取特定哈希内所有字段的列表,请运行hkeys命令:

1hkeys poet:Verlaine
1[secondary_label Output]
21) "nationality"
32) "born"
43) "died"
54) "genre"

相反,运行hvals来检索哈希中持有的值列表:

1hvals poet:Verlaine
1[secondary_label Output]
21) "French"
32) "1844"
43) "1896"
54) "Decadent"

要返回哈希所持有的每个字段和相关值的列表,运行hgetall:

1hgetall poet:Verlaine
1[secondary_label Output]
21) "nationality"
32) "French"
43) "born"
54) "1844"
65) "died"
76) "1896"
87) "genre"
98) "Decadent"

您可以通过运行hlen来找到哈希中的字段数量,这代表**h**ash **len**gth:

1hlen poet:Verlaine
1[secondary_label Output]
2(integer) 4

您可以找到与hstrlen字段相关的值字符串的长度,该字符代表**h**ash **str**ing **len**gth:

1hstrlen poet:Verlaine nationality
1[secondary_label Output]
2(integer) 8

hlen将返回(整数) 0,如果哈希不存在。

从哈希中删除字段

要从哈希中删除一个字段,请运行hdel命令。hdel可以接受多个字段作为参数,并将返回一个指示从哈希中删除了多少字段的整数:

1hdel poet:Verlaine born died
1[secondary_label Output]
2(integer) 2

如果您将不存在的字段传输到hdel,它会忽略该字段,但会删除您指定的任何其他现有字段。

结论

本指南详细介绍了在 Redis 中创建和管理哈希的若有其他相关命令、论点或程序,您希望在本指南中了解,请在评论中询问或提出建议。

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

Published At
Categories with 技术
comments powered by Disqus