redis之哈希

这里先不展示常用命令。

Redis 中,哈希类型 是指键值本身又是一个 键值对结构

在使用 hgetall 时,如果 哈希元素 个数比较多,会存在 阻塞 Redis 的可能。如果开发人员只需要获取 部分 field,可以使用 hmget,如果一定要获取 全部 field-value,可以使用 hscan 命令,该命令会 渐进式遍历 哈希类型。

内部编码

哈希类型内部编码 有两种:

ziplist(压缩列表)

哈希类型 元素个数 小于 hash-max-ziplist-entries 配置(默认 512个)、同时 所有值小于 hash-max-ziplist-value 配置(默认 64 字节)时, Redis 会使用 ziplist 作为 哈希内部实现ziplist 使用更加 紧凑的结构 实现多个元素的 连续存储,所以在 节省内存 方面比 hashtable 更加优秀。

hashtable(哈希表)

哈希类型 无法满足 ziplist 的条件时, Redis 会使用 hashtable 作为 哈希内部实现,因为此时 ziplist读写效率 会下降,而 hashtable 的读写 时间复杂度O(1)

下面的示例演示了 哈希类型内部编码,以及相应的变化。

field 个数 比较少,且没有大的 value 时,内部编码ziplist

  • 当有 value 大于 64 字节时,内部编码 会由 ziplist 变为 hashtable
  • field 个数 超过 512内部编码 也会由 ziplist 变为 hashtable