关于redis:redis学习之九哈希对象

2次阅读

共计 641 个字符,预计需要花费 2 分钟才能阅读完成。

之前相关联的文章:
redis 学习之一 SDS
redis 学习之二双端链表
redis 学习之三字典
redis 学习之四 skiplist
redis 学习之五 ziplist
redis 学习之六对象
redis 学习之七字符串对象
redis 学习之八列表对象

哈希对象的编码能够是 ziplist 或 hashtable。当同时满足上面两个条件时应用 ziplist 编码,不满足时则应用 hashtable。

  1. 保留的键和值的字符串长度都小于 64 字节。
  2. 保留的键值对数量小于 512 个。

下面两个条件能够通过 hash-max-ziplist-value 和 hash-ziplist-entries 两个值进行调整。

当应用 ziplist 编码时有上面两个特点:

  1. 健值对作为两个节点是紧挨在一起的,健节点在前值节点紧随其后。
  2. 健节点放在 ziplist 表头方向,值节点放在 ziplist 表尾方向。

看下执行了上面命令后:

redis> HSET profile Name "Tom"
(integer) 1

redis> HSET profile Age 18
(integer) 1

存储如下图:

当应用 hashtable 编码时有上面两特点:

  1. hashtable 里的每个键都是一个 stringObject 对象,对象里保留了键的内容。
  2. hashtable 里的每个值都是一个 stringObject 对象,对象里保留了值的内容。

下面执行的命令如果应用的是 hashtable,则存储如下:

(存储的格局是下面展现的,疏忽外面具体的内容。。。)

参考的文章有:
黄健宏的《Redis 设计与实现》一书

正文完
 0