介绍
Redis是一个开源的内存关键值数据存储库。Redis hash是一个代表字符串字段和字符串值之间的映射的数据类型。哈希可以包含许多字符串值对,并且设计不占用太多的空间,因此它们非常适合代表数据对象。
本教程将讨论如何在Redis中管理哈希,从创建它们到检索和删除哈希中的数据。
如何使用此指南
这个指南是写成一个骗局的表,包含自含的示例,我们鼓励你跳到任何与你试图完成的任务相关的部分。
在本指南中显示的命令在运行 Redis 版本 6.0.1 版本的 Ubuntu 22.04 服务器上进行了测试。 要设置类似的环境,您可以遵循我们指南中的 Step 1 在 How 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"
如果您转移到hget
或hmget
的哈希不存在,那么两个命令都会返回(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 数据库。