【《Redis深度历险》读书笔记(2)】源码(1-4):探索字符串、字典、压缩列表(ziplist)、快速列表(quicklist)内部结构

本文深入探讨Redis中五种核心数据结构:简单动态字符串(SDS)、字典(dict)、压缩列表(zipList)、小整数集合(IntSet)及快速列表(quickList)的内部实现细节。了解这些结构如何支撑Redis高性能运作。

【时间】2021.11.17

【题目】【《Redis深度历险》读书笔记(2)】源码(1-4):探索字符串、字典、压缩列表(ziplist)、快速列表(quicklist)内部结构

本栏目是《Redis深度历险:核心原理和应用实践》的读书笔记。

目录

一、简介

二、一些重点图

1、SDS的结构

 2、SDS的两种编码方式

 3、dict的内部结构(包含2个HashTable)

1)dict的内部结构

2)HashTable结构

 4、zipList内部结构

 1)zipList

 2)entry结构

5、IntSet 小整数集合

6、quickList结构(zipList+LinkedList)

三、思维导图


一、简介

        本章主要主要介绍了Redis 字符串、字典、压缩列表(ziplist)、快速列表(quicklist)内部结构(底层实现)。

  • 字符串 :简单动态字符串 SDS,一个带长度信息的字节数组(冗余数组)
  • 字典(dict):包含两个HashTable的dict对象,便于进行"渐进式rehash"
  • 压缩列表(ziplist):一块连续的内存空间,元素之间紧挨着存储,没有任何冗余空隙。zset 和 set对象在元素个数较少的时候,采用压缩列表进行存储,早期List在元素个数较少时也使用zipList,较多时使用linkedList。
  • 快速列表(quicklist):Redis后期使用的List底层结构,结合了linkedList和zipList,即每个节点是zipList,节点间用双向指针串联。

二、一些重点图

1、SDS的结构

struct SDS<T> {
 T capacity; // 数组容量
 T len; // 数组长度
 byte flags; // 特殊标识位
 byte[] content; // 数组内容
}

 2、SDS的两种编码方式

其中RedisObject对象头是:

struct RedisObject {
 int4 type; // 4bits,类型
 int4 encoding; // 4bits,编码方式(底层结构)
 int24 lru; // 24bits,LRU 信息
 int32 refcount; // 4bytes,引用计数
 void *ptr; // 8bytes,对于64-bit system,对象指针
} robj;

 3、dict的内部结构(包含2个HashTable)

 1)dict的内部结构

 2)HashTable结构

 4、zipList内部结构

 1)zipList

struct ziplist<T> {
 int32 zlbytes; // 整个压缩列表占用字节数
 int32 zltail_offset; // 最后一个元素距离压缩列表起始位置的偏移量,用于快速定位到最后一个
节点
 int16 zllength; // 元素个数
 T[] entries; // 元素内容列表,挨个挨个紧凑存储
 int8 zlend; // 标志压缩列表的结束,值恒为 0xFF
}

 2)entry结构

struct entry {
 int<var> prevlen; // 前一个 entry 的字节长度(变长整型)
 int<var> encoding; // 元素类型编码
 optional byte[] content; // 元素内容
}

5、IntSet 小整数集合

6、quickList结构(zipList+LinkedList)

三、思维导图

四 、扩展阅读

1、hash算法:SipHash 算法流程​​​​​​​
2、Redis系列(六)底层数据结构之字典

3、《ziplist、linkedlist 和 quicklist 的性能对比》
4、《Redis列表对象之linkedlist(双端列表)和ziplist(压缩列表)及quicklick(快速列表)实现原理分析》​​​​​​​

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 HTML大屏展示模板是一种用于设计具有视觉冲击力且内容充实的巨型显示屏应用的设计方案,其应用范围广泛,涵盖了数据分析、监控以及决策支持等多个领域。这些模板通常整合了HTML、CSS、JavaScript等多种技术,尤其借助ECharts等数据可视化工具以达成复杂数据的图形化呈现。以下是对相关技术细节的深入说明: 1. **可视化**:数据可视化是将抽象的数据转化为直观的图像或图表的技术手段。这种技术有助于迅速识别数据中的模式、发展趋势和异常情况,使得非专业背景的人员也能轻松理解复杂的数据信息。在大屏展示场景中,可视化通常包含折线图、柱状图、饼图、热力图、地图等多种图表形式。 2. **大数据**:大数据指的是规模庞大、增长迅速、种类多样且数据密度较低的数据集合。在HTML大屏展示中,大数据的应用旨在支持实时或近乎实时的决策制定,例如监控销售业绩、交通流量、能源消耗等关键性能指标。 3. **HTML**:超文本标记语言(HTML)构成了网页内容的基础结构,用于界定页面的布局和元素。在大屏展示模板中,HTML负责构建页面组件,例如标题、段落、图像以及图表容器等。 4. **CSS**:层叠样式表(CSS)用于调控网页的视觉风格和布局结构。在大屏模板设计中,CSS扮演着核心角色,确保设计的响应性、适应性和美观度,包括设定颜色、字体、间距、动画效果等。 5. **ECharts**:ECharts是由百度研发的一款开源JavaScript数据可视化库,能够支持多种图表类型,如折线图、柱状图、散点图等,并提供了丰富的交互特性。在大屏展示中,ECharts能够助力生成动态且交互式的数据...
内容概要:本文针对拒绝服务(DoS)攻击威胁下孤岛微电网的运行安全问题,提出了一种兼顾功率精确均分与电压频率电能质量恢复的抗DoS混合动态事件触发二次控制策略,并通过Simulink平台完成了系统建模与仿真实现。该方法融合混合动态事件触发机制,在保证控制精度的同时有效降低通信网络负载,增强系统对DoS攻击的鲁棒性。通过设计分布式协同控制器,实现了在通信受限与恶意攻击耦合环境下的频率和电压协调调控,解决了传统控制方法在遭受攻击时可能出现的控制失效、状态发散或动态性能退化等问题。研究重点包括事件触发条件的设计、DoS攻击容忍边界的分析以及多智能体系统稳定性证明,最终确保微电网在异常工况下仍能维持稳定运行,提升其弹性与自治能力。; 适合人群:从事电力系统自动化、微电网控制、能源互联网安全、分布式控制理论及相关领域研究的研究生、高校科研人员及电力行业工程技术开发者,需具备现代控制理论基础、分布式控制知识以及Simulink/Matlab仿真能力; 使用场景及目标:①应用于面临网络安全威胁的微电网二次控制系统的安全设计;②为高比例可再生能源接入场景下的微电网提供具有弹性和抗干扰能力的协同控制解决方案;③支撑硕士或博士论文中关于事件触发控制、网络物理系统安全、多智能体协同控制等方向的研究与创新; 阅读建议:建议结合提供的Simulink仿真模型进行同步学习,重点关注混合动态事件触发机制的构造逻辑、Lyapunov-Krasovskii稳定性分析过程以及DoS攻击下系统性能退化与恢复的仿真对比实验,深入理解控制参数整定与攻击容忍阈值之间的关系,以便于复现、验证与进一步拓展研究。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 ### Rufus 3.13 U盘制作工具详解 #### 一、简介 Rufus是一款性能卓越的U盘启动盘制作软件,能够协助用户迅速将U盘转变为可启动的安装载体,在Windows系统的署与维护中具有广泛的应用。此次介绍的版本为Rufus 3.13,相较于先前的版本,该版本在稳定性和兼容性方面实现了明显的进步。 #### 二、特点与优势 1. **操作便捷**:Rufus的界面设计直观清晰,即便是计算机操作初学者也能够迅速掌握。 2. **跨平台支持**:兼容多种操作系统环境,涵盖了Windows 10、Windows 8/8.1、Windows 7等操作系统。 3. **快速高效**:能够在较短时间内完成U盘的格式处理及启动配置,显著降低了用户的时间成本。 4. **功能丰富**:不仅支持基础的U盘启动盘制作,还具备UEFI启动模式、ISO镜像文件写入等高级功能。 5. **个性化设置**:用户可根据实际需求调整U盘的文件系统类型、卷标等参数,以适应不同的使用场景。 #### 三、应用场景 1. **系统安装**:当计算机系统出现故障无法正常启动时,可借助Rufus制作的启动盘进行系统安装。 2. **数据管理**:通过启动盘中的工具执行硬盘数据的备份与还原操作。 3. **软件验证**:在不安装至主硬盘的情况下,利用启动盘对软件或系统的兼容性进行测试。 4. **网络问题诊断**:借助预置的网络检测工具对网络故障进行排查。 #### 四、操作流程 1. **获取并安装Rufus**:首先从官方网站或其他可信渠道获取Rufus 3.13安装文件,并遵循指引完成安装过程。 2....
内容概要:本文档为西门子SIMATIC旋转刀(Rotary Knife)V1.5.0版本的更新日志,详细记录了从初始版本V1.0.0(2018年发布)到最新版本V1.5.0(2025年4月发布)之间的所有变更内容。主要包括各功能模块如LRK_RotaryKnife、LRK_Servo、LRK_LeadingValue等的优化、错误修复、运行时性能提升以及新增功能说明。例如,在V1.5.0版本中进行了多项Bug修复,包括印刷标记校正、轴切换行为、模式转换异常等问题,并对数据类型兼容性做出调整,同时多个子模块增加了“块信息头”和“描述”区域以增强可读性和维护性。此外,文档还强调了安全使用规范、法律责任免除条款及工业网络安全建议。; 适合人群:从事自动化控制系统的工程师、技术支持人员以及使用西门子PLC进行设备开发与维护的研发人员,特别是涉及旋转刀切割工艺的项目开发者。; 使用场景及目标:①帮助用户了解SIMATIC旋转刀各版本间的功能演进与问题修复情况;②指导开发人员在升级或集成该组件时规避不兼容风险并正确应用最新特性;③为系统调试、故障排查提供版本依据和技术参考; 阅读建议:此资源以版本迭代形式呈现技术细节,建议结合实际工程项目按需查阅特定版本变更内容,尤其关注重大更新带来的接口兼容性变化,并严格遵循西门子的安全与法律声明进行署与使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值