系列教程导航

本教程属于 Redis 管理系列的一部分,您可以参考以下相关指南:

  1. 如何在 Ubuntu 18.04 上安装和保护 Redis
  2. 如何连接到 Redis 数据库
  3. 如何管理 Redis 数据库和 Keys
  4. 如何在 Redis 中管理副本和客户端
  5. 如何在 Redis 中管理字符串
  6. 如何在 Redis 中管理 List
  7. 如何在 Redis 中管理 Hashes
  8. 如何在 Redis 中管理 Sets
  9. 如何在 Redis 中管理 Sorted Sets
  10. 如何在 Redis 中运行事务
  11. 如何使 Redis 中的 Key 失效
  12. 如何解决 Redis 中的故障
  13. 如何从命令行更改 Redis 的配置
  14. Redis 数据类型简介

介绍

Redis 是一个开源的内存中键值数据存储系统。Redis Hashes(哈希)是一种数据类型,表示字符串字段(field)和字符串值(value)之间的映射。Hashes 可以容纳许多字段 - 值对,并且设计为不占用太多空间,因此非常适合表示数据对象。例如,一个 Hash 可以代表一个客户,包含诸如 nameaddressemailcustomer_id 等字段。

本教程将介绍如何在 Redis 中管理 Hashes,涵盖从创建 Hashes 到检索和删除其中保存的数据的全过程。

如何使用本指南

本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。

本指南中显示的命令已在运行 Redis 版本 4.0.9Ubuntu 18.04 服务器上进行了测试。要设置类似的环境,您可以按照指南 如何在 Ubuntu 18.04 上安装和保护 Redis步骤 1 进行操作。我们将通过使用 Redis 命令行界面(redis-cli)运行它们来演示这些命令的行为。

请注意,如果您使用其他 Redis 界面(例如 Redli),则某些命令的确切输出可能会有所不同。

另外,您可以提供一个托管的 Redis 数据库实例来测试这些命令。但是请注意,根据数据库提供者所允许的控制级别,本指南中的某些命令可能无法按所述方式工作。要配置 DigitalOcean 托管数据库,请遵循我们的 托管数据库产品文档。然后,您必须 安装 Redli 设置 TLS 隧道 才能通过 TLS 连接到托管数据库。

创建 Hashes

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

hset poet:Verlaine nationality French
注意: 在此示例及以下示例中,poet:Verlaine 是 Hashes 键。点、破折号和冒号通常用于使多字键和字段更具可读性。确保您的密钥遵循一致且易于阅读的格式很有帮助。

hset 返回 (integer) 1 表示指定的字段是一个新字段且值设置正确:

1

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

另外,请注意,如果 Hash 值已经存在,hset 将覆盖其内容:

hset poet:Verlaine nationality Francais

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

0

您还可以使用 hsetnx 将字段添加到 Hashes,但是只有在字段不存在时才起作用。如果指定的字段已经存在,hsetnx 将不会有任何效果,并将返回 (integer) 0

hsetnx poet:Verlaine nationality French
0

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

hmset poet:Verlaine born 1844 died 1896 genre Decadent

hmset 成功就会返回 OK

从 Hashes 中检索信息

您可以使用 hexists 命令确定给定 Hashes 的字段是否存在:

hexists poet:Verlaine nationality

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

要返回一个字段的值,请运行 hget 命令,然后依次按 Hashes 键和要检索其值的字段:

hget poet:Verlaine nationality
"Francais"

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

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

如果您传递给 hgethmget 不存在的 Hashes,这两个命令将返回 (nil)

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

要获取特定 Hashes 中包含的所有字段的列表,请运行 hkeys 命令:

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

相反,运行 hvals 以检索哈希中包含的值的列表:

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

要返回 Hashes 表所包含的每个字段及其关联值的列表,请运行 hgetall

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

您可以通过运行 hlen 来查找 Hashes 中的字段数,它代表 "hash length":

hlen poet:Verlaine
4

你可以使用 hstrlen 找到一个字段关联的值字符串的长度,它的全称是 "hash string length":

hstrlen poet:Verlaine nationality
8

如果 Hashes 不存在,hlen 将返回 (integer) 0

从 Hashes 中删除字段

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

hdel poet:Verlaine born died
2

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

结论

本指南详细介绍了用于在 Redis 中创建和管理 Hashes 的许多命令。如果您想在本指南中概述其他相关的命令、参数或过程,请在下面的评论中提出疑问或提出建议。

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

说明: 本教程基于 Redis 4.0.9 版本编写。在 Redis 4.0.0 及更高版本中,HMSET 命令已被标记为废弃(deprecated),建议使用 HSET 命令同时设置多个字段值。此外,不同 Redis 版本或客户端工具(如 Redli)的输出格式可能略有差异。