Redis-Hash
悲观者从机会中看到困难。乐观者从困难中看到机会。
——温斯顿·丘吉尔
Hash 是一个键值对(key-value)集合,其中 value 的形式如value=[{field1, value1},...[{fieldN,valueN}]。Hash 特别适合用于存储对象。

内部实现
Hash 类型的底层数据结构是由压缩列表或哈希表实现的
- 如果哈希类型元素个数小于 512 个(默认值,可由 hash-max-ziplist-entries 配置),所有值小于 64 字节(默认值,可由 hash-max-ziplist-value 配置)的话,Redis 会使用压缩列表作为Hash 类型的底层数据结构;
- 如果哈希类型元素不满足上面条件,Redis 会使用哈希表作为 Hash 类型的 底层数据结构,
在 Redis 7.0 中,压缩列表数据结构已经废弃了,交由 listpack 数据结构来实现了。
应用场景
缓存对象
Hash 类型的(key,field, value)的结构与对象的(对象id, 属性,值)的结构相似,也可以用来存储对象。
我们以用户信息为例,它在关系型数据库中的结构是这样的:

我们可以使用如下命令,将用户对象的信息存储到 Hash 类型:
#存储一个哈希表uid:1的键值
> HMSET uid:1 name Tom age 15
2
#存储一个哈希表uid:2的键值
> HMSET uid:2 name Jerry age 13
2
# 获取哈希表用户id为1中所有的键值
> HGETALL uid:1
1)"name"
2)“Tom"
3)"age"
4)“15”
Redis Hash存储其结构如下图:

在介绍 String 类型的应用场景时有所介绍,String+Json也是存储对象的一种方式,那么存储对象时,到底用 String +json 还是用 Hash 呢?
一般对象用 String +Json 存储,对象中某些频繁变化的属性可以考虑抽出来用 Hash 类型存储。

浙公网安备 33010602011771号