Redis哈希对象

版权声明:本文为博主原创文章,转正请注明出处。 https://blog.csdn.net/sinat_32366329/article/details/81105289

Redis哈希对象

  1. hash对象的存储结构类型

答:hash对象的存储结构有两种类型ziplist和hashtable。

  1. ziplist作为hash的底层实现时候,如何存储数据

答:由于ziplist是列表的存储结构,那么存储时候的key-value如何实现存储呢?当有新的键值对要加入到hash对象的时候,程序会先将键的压缩列表节点推入到压缩列表表尾,然后将保持了值的压缩列表节点推入到压缩列表表尾。因此,保持了同一键值对的两个节点总是紧挨在一起,保持了键的节点在前,保持值的节点在后。

例如:执行HSET profile name “Tom”  HSET profile age 25  HSET profile career “Programmer”三个命令,如果hash底层使用ziplist作为实现,那么存储结构如下:

  1. hashtable作为hash的底层实现时候,如何存储数据

答:hashtable数据结构的底层实现其实是字典结构,hash对象中的每个键值对都使用一个字典键值对来保存:1)字典的每个键都是一个字符串对象,对象保存了键值对的键。2)字典的每个值都是一个字符串对象,对象保存了键值对的值。例如第二点中执行的命令,如果使用hashtable存储,结构如下:

  1. ziplist和hashtable之间如何决定使用哪种作为底层实现呢?

答:当哈希对象同时满足一下两个条件时,哈希对象使用ziplist编码:1)哈希对象保存的所有键值对的键和值的字符串长度都小于64字节。2)哈希对象保存的键值对数量小于512个。如果不能满足这两个条件的哈希对象需要使用hashtable编码。当然这两个参数是可以通过配置文件中的hash-max-ziplist-value和hash-max-ziplist-entries修改的。

猜你喜欢

转载自blog.csdn.net/sinat_32366329/article/details/81105289