文档:散列

此页面正在审核中。 该页面可能不正确、包含无效链接和/或需要技术审查。未来它可能会发生重大变化或被完全删除。


散列(Hashes)是记录类型,结构为字段-值对的集合。您可以使用散列来表示基本对象,并存储计数器的分组等。

127.0.0.1:6379> HSET bike:1 model Deimos brand Ergonom type 'Enduro bikes' price 4972
(integer) 4
127.0.0.1:6379> HGET bike:1 model
"Deimos"
127.0.0.1:6379> HGET bike:1 price
"4972"
127.0.0.1:6379> HGETALL bike:1
1) "model"
2) "Deimos"
3) "brand"
4) "Ergonom"
5) "type"
6) "Enduro bikes"
7) "price"
8) "4972"

虽然散列方便表示对象,但您可以放入散列中的字段数量实际上没有实际限制(除了可用内存),因此您可以在应用程序中以多种不同方式使用散列。

HSET 命令设置散列的多个字段,而 HGET 检索单个字段。HMGET 类似于 HGET 但返回一个值数组。

127.0.0.1:6379> HMGET bike:1 model price no-such-field
1) "Deimos"
2) "4972"
3) (nil)

也有能够对单个字段执行操作的命令,例如 HINCRBY

127.0.0.1:6379> HINCRBY bike:1 price 100
(integer) 5072
127.0.0.1:6379> HINCRBY bike:1 price -100
(integer) 4972

值得注意的是,小型散列(即,少量元素且值较小)在内存中以特殊方式编码,这使得它们非常节省内存。

基本命令

  • HSET 设置散列上一个或多个字段的值。
  • HGET 返回给定字段的值。
  • HMGET 返回一个或多个给定字段的值。
  • HINCRBY 将给定字段的值增加提供的整数。

查看完整的散列命令列表

示例

  • 存储 bike:1 的骑行次数、坠毁次数或车主更改次数的计数器
127.0.0.1:6379> HINCRBY bike:1:stats rides 1
(integer) 1
127.0.0.1:6379> HINCRBY bike:1:stats rides 1
(integer) 2
127.0.0.1:6379> HINCRBY bike:1:stats rides 1
(integer) 3
127.0.0.1:6379> HINCRBY bike:1:stats crashes 1
(integer) 1
127.0.0.1:6379> HINCRBY bike:1:stats owners 1
(integer) 1
127.0.0.1:6379> HGET bike:1:stats rides
"3"
127.0.0.1:6379> HMGET bike:1:stats owners crashes
1) "1"
2) "1"

性能

大多数散列命令的时间复杂度为 O(1)。

少数命令(例如 HKEYSHVALSHGETALL)的时间复杂度为 O(n),其中 n 是字段-值对的数量。

限制

每个散列最多可以存储 4,294,967,295 (2^32 - 1) 个字段-值对。实际上,您的散列仅受托管 Valkey 部署的 VM 上的总内存限制。