Redis哈希Hash底层数据结构

  1. Redis 底层数据结构

Redis数据库就像是一个哈希表,首先对key进行哈希运算得到哈希值再取模得到一个下标,每个元素是一个节点,节点之间形成链表。这感觉有点像Java中的HashMap。

Redis哈希Hash底层数据结构

不同的数据类型的实现方式是不一样的,可以通过object encoding命令查看底层真正的数据存储结构

Redis哈希Hash底层数据结构

同一种类型在不同的条件下所采用的数据结构也不一样,例如:

Redis哈希Hash底层数据结构

Redis是键值对形式的数据库,key可以是任意值(PS:最终都会转成string),value有多种数据类型

详见:https://redis.io/docs/manual/data-types/data-types-tutorial/

Redis哈希Hash底层数据结构

至此,已经很清楚,hash底层的结构是 ziplist 和 hashtable

那么,什么时候会从ziplist转成hashtable呢?这个在redis.conf中有相关的配置,如下:

Redis哈希Hash底层数据结构

默认情况下:

  1. 当ziplist中entry的数量超过512的时候,会转成hashtable
  2. 单个元素的值超过64字节的时候,会转成hashtable

  3. hashtable

在Redis中hashtable就是字典dict

通过源码,可以看到dict是这样定义的:

Redis哈希Hash底层数据结构

Redis哈希Hash底层数据结构
  1. redisDb 与 redisObject

通过源码得知,redisDb代表redis数据库,redisObject代表存到数据库中的数据

Redis哈希Hash底层数据结构

Redis哈希Hash底层数据结构

字典dict的结构前面已经看过了,于是整个数据库的结构大概就是下面这个样子:

Redis哈希Hash底层数据结构
  1. ziplist

Redis哈希Hash底层数据结构

ziplist是一种特殊编码的双链表,被设计成非常节省内存。它存储字符串和整型值,其中整数被编码为实际整数,而不是一系列字符。它允许在O(1)时间内在列表的任意一边进行push和pop操作。但是,由于每个操作都需要重新分配ziplist所使用的内存,因此实际的复杂性与ziplist所使用的内存量有关。

ziplist的大体布局如下:

<span><zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend></zlend></entry></entry></entry></zllen></zltail></zlbytes></span>

Redis哈希Hash底层数据结构
  1. linkedlist

Redis哈希Hash底层数据结构

Redis哈希Hash底层数据结构

linkedlist是一个双向链表

Redis哈希Hash底层数据结构
  1. quicklist

Redis哈希Hash底层数据结构

Redis哈希Hash底层数据结构

Redis哈希Hash底层数据结构

quicklistNode是一个32字节的结构体,描述快表的ziplist。

quicklist = linkedlist + ziplist

Redis哈希Hash底层数据结构
  1. 参考

http://redisbook.com/index.html

http://blog.itpub.net/70000430/viewspace-2787985/

https://www.cnblogs.com/reecelin/p/13358432.html

https://juejin.cn/post/6844904008591605767

Original: https://www.cnblogs.com/cjsblog/p/16526256.html
Author: 废物大师兄
Title: Redis哈希Hash底层数据结构

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711854/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Oracle授权允许远程访问–Oracle配置允许远程连接

    WindowsServer安装Oracle11g 11.2.0.1.0 对应的 windows 版本配置远程连接下载安装这里不详述具体安装步骤了,具体操作可参考安装教程 : Ora…

    技术杂谈 2023年5月31日
    0104
  • OAuth2AuthorizationServer

    基于Spring Security 5 的 Authorization Server的写法 先看演示 pom.xml <?xml version="1.0&quot…

    技术杂谈 2023年7月24日
    098
  • 小爱音响PC蓝牙方式连接配置

    直接连接是连接不上的,需要在小爱音响APP上进行如下配置,打开下面的配置 “音箱蓝牙可被发现”后,PC的蓝牙再去搜索,即可连上的同时,安装蓝牙音响的驱动。 …

    技术杂谈 2023年5月31日
    0290
  • 初识 @Configuration

    @Configuration这个注解是一个类注解,加在类上,标识该类是一个 配置类,让这个类的功能等同于一个bean xml配置文件。 @Configuration public …

    技术杂谈 2023年6月21日
    082
  • 3种常见的数据脱敏方案

    1.SQL数据脱敏实现 MYSQL(电话号码,身份证)数据脱敏的实现 — CONCAT()、LEFT()和RIGHT()字符串函数组合使用,请看下面具体实现 — CONCAT(…

    技术杂谈 2023年5月31日
    085
  • idea tomcat 输出乱码问题

    配置idea:Help -> Edit Custom VM Options,增加 -Dfile.encoding=UTF-8,tomcat的日志输出就不乱码了 tomcat启…

    技术杂谈 2023年7月11日
    073
  • c# Winform DataGridView 当前单元格失去焦点的有关问题

    在一个DataGridview中的某一个单元格输入了内容,点击窗体上的Button按钮(输入的光标还在那个输入的单元格中,没有失去焦点),获取到的那个单元格的值不是刚才输入的值,还…

    技术杂谈 2023年5月31日
    0100
  • 打卡汇报

    无意间浏览了liluvu的博客,大概表达了自己意志力不够坚强,想提高自己的身体素质和表达能力,现在坚持做(锻炼、背诵诗词、朗读(朗读唠叨训练)),看到这,觉得和自己有几分相似,正如…

    技术杂谈 2023年5月31日
    098
  • 宕机了,Redis数据丢了怎么办?

    前言 什么是AOF? 三种写回策略 日志文件太大怎么办? AOF重写会阻塞主线程吗? AOF的缺点 总结 什么是RDB? 给哪些数据做快照? 快照时能够修改数据吗? 多久做一次快照…

    技术杂谈 2023年7月23日
    0109
  • 网络中冗余备份

    冗余备份的重要性 如今社会,网络是各个产业的新的血脉,网络的稳定性至关重要,一旦网络出现故障,导致断网、延迟丢包等很可能会导致生产作业停滞,造成较经济损失,为此冗余备份至关重要,从…

    技术杂谈 2023年6月21日
    0119
  • 一篇文章剖析设计模式中的简单工厂、工厂方法和抽象工厂

    前言 大部分的面试者在IT行业面试中,提及设计模式,可以列举一大堆,但是面试官要求细说的时候,往往部分基础不够牢固的同学只能提及简单工厂。今天我们来对面试过程中最常见的简单工厂、工…

    技术杂谈 2023年7月11日
    0105
  • Mysql InnoDB Buffer Pool

    &#x53C2;&#x8003;&#x4E66;&#x7C4D;&#x300A;mysql&#x662F;&#x600E;&…

    技术杂谈 2023年7月25日
    078
  • 用户身份标识与账号体系实践

    互联网的账号自带备忘机制; 一、业务背景 通常在系统研发的过程中,需要不断适配各种业务场景,扩展服务的领域和能力,一般会将构建的产品矩阵划分出多条业务线,以便更好的管理; 由于各个…

    技术杂谈 2023年7月23日
    074
  • 为Jupyter notebook创建新kernel

    在新的虚拟环境中创建kernel 进入需要创建kernel的虚拟环境 conda activate pytorch 安装ipykernel ipykernel是必须安装的,也可以直…

    技术杂谈 2023年7月25日
    0114
  • flink-kafka-connector 的实现

    简单介绍 flink-kafka-connector用来连接kafka,用于消费kafka的数据, 并传入给下游的算子。 使用方式 首先来看下flink-kafka-connect…

    技术杂谈 2023年6月21日
    0126
  • WinFi一直Loading的解决办法,与其它抓包工具

    WinFi一直Loading的解决办法,与其它抓包工具 来源 https://www.acwifi.net/20163.html WinFi inSSIDer NetSpot Ek…

    技术杂谈 2023年5月31日
    0147
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球