当前位置: 首页 > article >正文

redis(Remote Dictionary Service) 底层数据结构

redis 底层数据结构

动态字符串SDS

在这里插入图片描述

优点
  • 获取字符串长度的时间复杂度O(1)
支持动态扩容,减少内存分配次数

新字符串小于1M – 新空间为扩展后字符串长度的两倍 + 1
新字符串大于1M – 新空间为扩展后字符串长度 + 1M + 1. 内存预分配

  • 二进制安全(记录了字符串长度)

IntSet

在这里插入图片描述

IntSet升级流程

在这里插入图片描述

Dict

在这里插入图片描述

扩容

条件:

  • 哈希表的LoadFactor(负载因子) >= 1 且服务器没有执行bgsave 或者bgrewriteaof等后台进程
  • 负载因子 > 5
收缩

条件 负载因子小于0.1

rehash

在这里插入图片描述

ZipList 特殊的“双端链表(具备双端链表的许多特性)” [为了节省内存设计]

由一系列特殊编码的连续内存块组成,可以在任意一端以O(1)时间复杂度进行压入/弹出操作。

在这里插入图片描述
在这里插入图片描述

ZipList的连锁更新问题

ZipList的每个Entry都包含previous_entry_length来记录上一个节点的大小:

  • 前一节点的长度小于254字节,previous_entry_length 1个字节
  • 前一节点的长度大于254字节,previous_entry_length 5个字节

QuickList

每个节点是一个ZipList的双端链表,可以对节点的ZipList做压缩。
list-max-ziplist-size:
在这里插入图片描述

list-compress-depth [控制首尾不压缩的节点个数]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SkipList

在这里插入图片描述

RedisObject

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/146346.html

相关文章:

  • Vue项目搭建教程超详细
  • Python毕业设计选题:基于django+vue的智能租房系统的设计与实现
  • 【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例
  • 2025.1.15——四、布尔注入
  • 【2024年华为OD机试】 (C卷,100分)- 小明找位置(Java JS PythonC/C++)
  • vue2配置跨域后请求的是本机
  • Java程序打包
  • 2023机器人灵巧手的分类与商业化应用及未来市场规模分析报告
  • 【23真题】罕见211!数一配英二!
  • Nvidia VPI 双目相机生成深度图
  • 反思一次效能提升
  • Unity 自带的一些可以操控时间的属性或方法。
  • 动态规划背包问题总结
  • 《算法通关村——解析堆在合并K个排序链表的应用》
  • Git 分支设计规范
  • 计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(商品和购物车)
  • ruoyi-plus-vue docker 部署
  • 《微信小程序开发从入门到实战》学习二十八
  • Clion取消double shift(按两下shift键)全局搜索
  • 简易版王者荣耀
  • Ansible的重用(include和import)
  • 大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异
  • 某高级度假村技术人员薪酬体系设计咨询项目纪实
  • 基于Java SSM在线图书推荐与交流平台
  • requests请求django接口跨域问题处理
  • TypeError: ‘_io.TextIOWrapper’ object is not subscriptable