原创

redis数据结构-五种数据类型-Hash


Hash结构与Redis中的Zset非常类似:

  • 都是键值存储

  • 都需求根据键获取值

  • 键必须唯一

区别如下:

  • zset的键是member,值是score;hash的键和值都是任意值
  • zset要根据score排序;hash则无需排序

因此,Hash底层采用的编码与Zset也基本一致,只需要把排序有关的SkipList去掉即可:

微信截图_20230212145706

微信截图_20230213104156

因此,Hash底层采用的编码与Zset也基本一致,只需要把排序有关的SkipList去掉即可:

  • Hash结构默认采用ZipList编码,用以节省内存。ZipList中相邻的两个entry 分别保存field和value

  • 当数据量较大时,Hash结构会转为HT编码,也就是Dict,触发条件有两个:

    1. ZipList中的元素数量超过了hash-max-ziplist-entries(默认512)
    2. ZipList中的任意entry大小超过了hash-max-ziplist-value(默认64字节)

下面是Hash转为HT编码的一个转换过程

微信截图_20230212150125

微信截图_20230212151444

hash的执行redis命令的方法

微信截图_20230212151543

查找创建方法

微信截图_20230212154720

创建Hash的方法

微信截图_20230212154728

判断是否需把ZipList转为Dict(在这里会做entry大小判断)

微信截图_20230212155625

对数据内容的操作方法(在这里会做元素数量判断)

微信截图_20230212160023

设置hash-max-ziplist-entries和hash-max-ziplist-value限制值的命令

微信截图_20230212160724

redis原理
数据结构
  • 作者:陌攻(联系作者)
  • 发表时间:2023-02-13 04:49
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论