Redis hashes

2024-01-23 16:41:47 浏览数 (1)

原文在这里[1]。

Redis哈希是以字段-值对的形式组织的记录类型。你可以使用哈希表示基本对象,并存储计数器的分组,等等。

代码语言:javascript复制
> HSET bike:1 model Deimos brand Ergonom type 'Enduro bikes' price 4972
(integer) 4
> HGET bike:1 model
"Deimos"
> HGET bike:1 price
"4972"
> HGETALL bike:1
1) "model"
2) "Deimos"
3) "brand"
4) "Ergonom"
5) "type"
6) "Enduro bikes"
7) "price"
8) "4972"

虽然哈希很方便表示

对象

,但实际上,你可以放置在哈希中的字段数量没有实际限制(除了可用内存),因此你可以在应用程序中以许多不同的方式使用哈希。

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

代码语言:javascript复制
> HMGET bike:1 model price no-such-field
1) "Deimos"
2) "4972"
3) (nil)

还有一些命令可以对单个字段执行操作,比如HINCRBY

代码语言:javascript复制
> HINCRBY bike:1 price 100
(integer) 5072
> HINCRBY bike:1 price -100
(integer) 4972

你可以在文档中找到哈希命令的完整列表[2]。

值得注意的是,小型哈希(即,具有小值的几个元素)以内存中的一种特殊方式进行编码,使它们非常内存高效。

基本命令

HSET在哈希上设置一个或多个字段的值。•HGET返回给定字段的值。•HMGET返回一个或多个给定字段的值。•HINCRBY按所提供的整数递增给定字段的值。

详见完整的列表命令[3]。

示例

•存储bike:1已经骑行的次数、发生事故的次数或更改所有者的次数的计数器:

代码语言:javascript复制
> HINCRBY bike:1:stats rides 1
(integer) 1
> HINCRBY bike:1:stats rides 1
(integer) 2
> HINCRBY bike:1:stats rides 1
(integer) 3
> HINCRBY bike:1:stats crashes 1
(integer) 1
> HINCRBY bike:1:stats owners 1
(integer) 1
> HGET bike:1:stats rides
"3"
> HMGET bike:1:stats owners crashes
1) "1"
2) "1"

性能

大多数Redis哈希命令都是O(1)。

少部分命令 - 如HKEYSHVALSHGETALL - 是 O(n),n是字段-值的数量。

限制

每个哈希可以存储最多4,294,967,295(2^{32} - 1)个字段-值对。在实践中,你的哈希仅受托管Redis部署的VMs上的总体内存限制。

了解更多

•Redis哈希解析[4]是一个简短而全面的视频解释,涵盖了Redis哈希。•Redis University RU101[5]深入探讨了Redis哈希。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[6]进行许可,使用时请注明出处。 Author: mengbin[7] blog: mengbin[8] Github: mengbin92[9] cnblogs: 恋水无意[10] 腾讯云开发者社区:孟斯特[11]

References

[1] 这里: https://redis.io/docs/data-types/hashes/ [2] 文档中找到哈希命令的完整列表: https://redis.io/commands#hash [3] 完整的列表命令: https://redis.io/commands/?group=hash [4] Redis哈希解析: https://www.youtube.com/watch?v=-KdITaRkQ-U [5] Redis University RU101: https://university.redis.com/courses/ru101/?_ga=2.74392018.130259205.1705572418-889654803.1705481218&_gl=1*1q0u96o*_ga*ODg5NjU0ODAzLjE3MDU0ODEyMTg.*_ga_8BKGRQKRPV*MTcwNTgyNjQ0OS4xMS4xLjE3MDU4MjY0NTIuNTcuMC4w*_gcl_au*MTQzNTAwOTk2LjE3MDU0ODEyMTc. [6] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [7] mengbin: mengbin1992@outlook.com [8] mengbin: https://mengbin.top [9] mengbin92: https://mengbin92.github.io/ [10] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/ [11] 孟斯特: https://cloud.tencent.com/developer/user/6649301

0 人点赞