引言

Redis 是一个开源的、内存中的键值数据存储。 Redis 散列是一种数据类型,表示字符串字段和字符串值之间的映射。 散列可以容纳许多字段值对,并且设计成不占用太多空间,因此它们是表示数据对象的理想选择。 例如,散列可能表示客户,并包含姓名、地址、电子邮件或客户 id 等字段。

本教程将介绍如何在 Redis 中管理散列,从创建散列到检索和删除散列中的数据。

如何使用本指南

本指南是作为包含自包含示例的备忘单编写的。 我们鼓励您跳转到任何与您正在尝试完成的任务相关的部分。

本指南中显示的命令是在运行 Redis 4.0.9版本的 Ubuntu 18.04服务器上测试的。 要建立一个类似的环境,你可以按照我们关于如何在 Ubuntu 18.04上安装和保护 Redis 的指南的第一步。 我们将通过使用 Redis-cli (Redis 命令行界面)运行这些命令来演示它们的行为。 请注意,如果您使用的是不同的 Redis 接口ーー例如 Redli ーー某些命令的确切输出可能会有所不同。

或者,您可以提供一个托管 Redis 数据库实例来测试这些命令,但是请注意,根据您的数据库提供程序所允许的控制级别,本指南中的某些命令可能不能像描述的那样工作。 要提供一个数字数据库管理数据库,请遵循我们的管理数据库产品文档。 然后,必须安装 Redli 或设置 TLS 通道,以便通过 TLS 连接到托管数据库。

创建哈希

若要创建散列,请运行 hset 命令。 该命令接受散列键的名称、字段字符串和相应的值字符串作为参数:

  • hset poet:Verlaine nationality French

注意: 在这个例子和下面的例子中,poet: Verlaine 是散列键。 点、破折号和冒号通常用于使多字键和字段更易于阅读。 这有助于确保您的键遵循一致和易于阅读的格式。

如果指定的字段是一个新字段并且值设置正确,则 hset 返回(integer)1:

Output
(integer) 1

但是,如果未能包含散列键的值、字段或名称,则 hset 将返回错误。

另外,注意,如果哈希已经存在,那么 hset 会覆盖哈希的内容:

  • hset poet:Verlaine nationality Francais

如果字段已经存在并且其值已经更新成功,那么 hset 将返回(integer)0:

Output
(integer) 0

您还可以使用 hsetnx 将字段添加到哈希表中,但只有在该字段尚不存在的情况下,它才能工作。 如果指定的字段已经存在,那么 hsetnx 将不会产生任何效果,并返回(integer)0:

  • hsetnx poet:Verlaine nationality French
Output
(integer) 0

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

  • hmset poet:Verlaine born 1844 died 1896 genre Decadent

如果成功,hmset 将返回 OK。

从哈希中检索信息

使用 hexists 命令可以确定给定散列是否存在一个字段:

  • hexists poet:Verlaine nationality

如果字段确实存在,则 hexists 将返回(integer)1,如果不存在,则返回(integer)0。

要返回一个字段的值,运行 hget 命令,后跟散列键和要检索其值的字段:

  • hget poet:Verlaine nationality
Output
"Francais"

Hmget 使用相同的语法,但可以返回多个字段的值

  • hmget poet:Verlaine born died
Output
1) "1844" 2) "1896"

如果传递给 hget 或 hmget 的散列不存在,两个命令都会返回(nil) :

  • hmget poet:Dickinson born died
Output
1) (nil) 2) (nil)

若要获取某个散列中所有字段的列表,请运行 hkeys 命令:

  • hkeys poet:Verlaine
Output
1) "nationality" 2) "born" 3) "died" 4) "genre"

相反,运行 hvals 检索散列中的值列表:

  • hvals poet:Verlaine
Output
1) "French" 2) "1844" 3) "1896" 4) "Decadent"

要返回哈希所包含的每个字段及其相关值的列表,请运行 hgetall:

  • hgetall poet:Verlaine
Output
1) "nationality" 2) "French" 3) "born" 4) "1844" 5) "died" 6) "1896" 7) "genre" 8) "Decadent"

通过运行 hlen (代表“ h ash len gth”) ,您可以找到散列中的字段数:

  • hlen poet:Verlaine
Output
(integer) 4

您可以找到与带有 hstrlen 的字段相关联的值字符串的长度,该字符串表示“ h ash str ing len gth” :

  • hstrlen poet:Verlaine nationality
Output
(integer) 8

如果散列不存在,hlen 将返回(integer)0。

从哈希中移除字段

若要从散列中删除字段,请运行 hdel 命令。 Hdel 可以接受多个字段作为参数,并返回一个整数,表示从散列中删除了多少字段:

  • hdel poet:Verlaine born died
Output
(integer) 2

如果将不存在的字段传递给 hdel,它将忽略该字段,而删除指定的任何其他现有字段。

总结

本指南详细介绍了用于在 Redis 创建和管理散列的许多命令。 如果还有其他相关的命令、参数或者程序你想在本指南中看到,请在下面的评论中询问或者提出建议。

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