如何管理 Redis 中的哈希散列(Hash)
源地址:https://www.digitalocean.com/community/tutorials/how-to-manage-hashes-in-redis
作者:Mark Drake
简介
Redis 是一个开源的、运行在内存中的键值数据库。Redis 的 哈希散列 是一种数据类型,它表示一个字符串字段和一个字符串值之间的映射。一个哈希可以容纳许多键值对,并且被设计成不占用太多空间,使其成为代表数据对象的理想选择。例如,一个哈希值可能代表一个客户,并包括 "姓名"、"地址"、"电子邮件 "或 "客户 ID "等字段。
本教程将介绍如何在 Redis 中管理哈希,包括创建哈希、检索和删除哈希散列中的数据。
如何使用这个教程
这个教程是以小抄(Cheat Sheet)的形式写的,有对应的例子。我们鼓励你直接跳转到和你要完成的任务相关的章节进行阅读。
这个教程中的命令在 Ubuntu 18.04 中的 Redis 4.0.9 版本完成测试。如果你需要建设一个同样的环境,可以参考我们的 如何在 Ubuntu 18.04 上安装并加固 Redis 中的 Step 1 来安装 Redis。我们将通过 Redis 命令行界面redis-cli
运行这些命令,来演示这些命令的行为。请注意,如果你使用不同的 Redis 工具--例如Redli —— 某些命令的实际输出可能有所不同。
此外,你还可以使用一个代管的 Redis 数据库实例来测试这些命令。但需要注意的是,根据你的数据库服务提供商的限制,这个教程中的某些命令可能运行效果和教程不一致。如果想要使用 DigitalOcean 提供的代管数据库,可以查看我们的代管数据库产品文档。使用代管 Redis 数据库实例时,你必须安装 Redli或设置 TLS 隧道 来通过 TLS 链接到代管数据库。
创建哈希散列
要创建哈希散列,请运行 hset
命令。此命令接受哈希键的名称、字段字符串和相应的值字符串作为参数:
127.0.0.1:6379> hset poet:Verlaine nationality French
注意:在这个例子中,
poet:Verlaine
是这个散列的键。点、破折号、冒号通常用于使多字的键和字段更具有可读性。确保你的键遵循同一个易于阅读的规范对于数据维护很有帮助。
如果指定的字段是新字段并且值设置正确,则 hset
返回 (integer) 1
:
输出
(integer) 1
但是,如果你没有为哈希键包含值、字段或名称,“hset”将返回错误。
另外,请注意 hset
将覆盖已经存在的散列的内容。
127.0.0.1:6379> hset poet:Verlaine nationality Francais
如果该字段已存在并且其值已成功更新,则 hset
将返回 (integer) 0
:
输出
(integer) 0
你还可以使用 hsetnx
将字段添加到哈希散列中,但它仅在该字段尚不存在时才有效。如果指定的字段已经存在,hsetnx
不会有任何作用,并且会返回 (integer) 0
:
127.0.0.1:6379> hsetnx poet:Verlaine nationality French
输出
(integer) 0
要将多个字段/值对设置为给定集合,请使用 hmset
命令,后跟相应的字段/值字符串:
127.0.0.1:6379> hmset poet:Verlaine born 1844 died 1896 genre Decadent
hmset
成功后将会返回一个 OK
从哈希散列中提取值
你可以使用 hexists
命令确定给定哈希散列是否存在字段:
127.0.0.1:6379> hexists poet:Verlaine nationality
如果字段存在,hexists
将返回 (integer) 1
,如果不存在,则返回 (integer) 0
。
要返回字段的值,请运行 hget
命令,后跟哈希键和要检索其值的字段:
127.0.0.1:6379> hget poet:Verlaine nationality
输出
"Francais"
hmget
使用相同的语法,但可以返回多个字段的值
127.0.0.1:6379> hmget poet:Verlaine born died
输出
1) "1844"
2) "1896"
如果你传递给 hget
或 hmget
的哈希值不存在,这两个命令都将返回 (nil)
:
127.0.0.1:6379> hmget poet:Dickinson born died
输出
1) (nil)
2) (nil)
要获取某个哈希散列中包含的所有字段的列表,请运行“hkeys”命令:
127.0.0.1:6379> hkeys poet:Verlaine
输出
1) "nationality"
2) "born"
3) "died"
4) "genre"
相反,运行 hvals
来检索保存在哈希散列中的值列表:
127.0.0.1:6379> hvals poet:Verlaine
输出
1) "French"
2) "1844"
3) "1896"
4) "Decadent"
要返回散列所包含的每个字段及其关联值的列表,请运行 hgetall
:
127.0.0.1:6379> hgetall poet:Verlaine
输出
1) "nationality"
2) "French"
3) "born"
4) "1844"
5) "died"
6) "1896"
7) "genre"
8) "Decadent"
你可以通过运行 hlen
来查找哈希散列中的字段数,它代表“hash length”:
127.0.0.1:6379> hlen poet:Verlaine
输出
(integer) 4
你可以使用hstrlen
找到与字段关联的值字符串的长度,它代表“hash string length”:
127.0.0.1:6379> hstrlen poet:Verlaine nationality
输出
(integer) 8
如果哈希散列不存在,hlen
将返回 (integer) 0
。
从哈希散列中移除字段
要从哈希散列中删除字段,请运行“hdel”命令。 hdel
可以接受多个字段作为参数,并将返回一个整数,指示从哈希散列中删除了多少字段:
127.0.0.1:6379> hdel poet:Verlaine born died
输出
(integer) 2
如果你将不存在的字段传递给 hdel
,它将忽略该字段但删除你指定的任何其他现有字段。
总结
本指南详细介绍了一些用于在 Redis 中创建和管理哈希的命令。