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

Redis键值对中值的数据结构

前言

前面我们已经介绍了Redis的键值对存储管理的底层数据结构。如果不清楚的同志可以看我前面的博客

Redis数据库存储键值对的底层原理-CSDN博客

下面,我们来看一下Redis键值对中值的数据结构有那些叭

Redis常见的5种数据类型

string                                                                                                          动态字符串,可扩容

list列表                                                                                                       压缩列表、双向链表

hash散列                                                                                                    压缩列表、哈希表

set无序唯一集合,可求交集、并集、差集                                                    哈希表

zset有序集合分值排序(分值可以重复) zset不支持差集运算                        压缩列表、跳表

所以,我们常见的Redis键值对中值的数据结构有字符串、双向链表、哈希表、压缩列表和跳表

字符串和双向链表就不需要过多解释,非常常见,哈希表在前面已经解释过了,如果不清楚的同志可以看我的上篇文章

Redis数据库存储键值对的底层原理-CSDN博客

所以我们现在需要重点讲解一下,压缩列表和跳表

压缩列表

压缩列表就是可以理解为是一个数组
与数组不同的是
1、压缩列表存储的是序列化之后的值
2、压缩列表在表头有三个字段,分别是列表字节长度、列表尾节点的字节偏移量、列表中数据的个数,为数组提供高效的尾部数据插入

        我们可以使用表头的三个字段快速访问到数组的第一项数据和最后一项数据,⽽查找其他元素时,就没有这么⾼效了,只能逐个查找

列表尾节点的字节偏移量可以理解为不带最后一项数据的数组字节长度

其中,list列表、hash、set集合、有序集合zset在数据量少的时候使用的就是压缩列表

跳表

有序链表只能逐⼀查找元素,导致操作起来⾮常缓慢,于是就出现了跳表。具体来说,跳表在链表 的基础上,增加了多级索引,通过索引位置的⼏个跳转,实现数据的快速定位

跳表上面的索引也是使用链表做的,比如第0层为有序链表,第1层隔一个节点取一个节点组成链表索引,依次操作,直至最顶层最少为一个节点

优先使用压缩列表原因

数据量少的情况下使用压缩列表的原因

压缩列表本质就是一个带有三个字段表头的数组

1、内存利⽤率,数组和压缩列表都是⾮常紧凑的数据结构,它⽐链表占⽤的内存 要更少

2、Redis是内存数据库,⼤量数据存到内存中,此时需要做尽可能的优化,提⾼内存的利⽤率。

3、数组对CPU⾼速缓存⽀持更友好,所以Redis在设计时,集合数据元素较少情况下, 默认采⽤内存紧凑排列的⽅式存储,同时利⽤CPU⾼速缓存不会降低访问速度。当数据元素超 过设定阈值后,避免查询时间复杂度太⾼,转为哈希和跳表数据结构存储,保证查询效率

http://www.lryc.cn/news/609979.html

相关文章:

  • 05 基于sklearn的机械学习-梯度下降(下)
  • 解决 “crypto.hash is not a function”:Vite 从 6.x 升级至 7.x 后 `pnpm run dev` 报错问题
  • vue3+vue-flow制作简单可拖拽可增删改流程图
  • JMeter的基本使用教程
  • OpenLayers 详细开发指南 - 第八部分 - GeoJSON 转换与处理工具
  • 《Java Agent与Instrumentation:运行时增强的魔法武器》
  • 为什么ping和dig(nslookup)返回地址不一样,两者的区别
  • 基于C语言实现(控制台 )小区物业管理系统
  • Java常用数据结构入门
  • 推荐广告搜索三种业务的区别
  • 车载通信架构 ---车内通信的汽车网络安全
  • 人工智能之数学基础:条件概率及其应用
  • 跟着顶刊学写论文-摘要1
  • 深入浅出 RabbitMQ:工作队列实战(轮训策略VS公平策略)
  • SpringCloud之Nacos基础认识-服务注册中心
  • 13.Home-面板组件封装
  • Mac桌面仿制项目--让ai一句话生成的
  • mac 技巧
  • 【AI 加持下的 Python 编程实战 2_13】第九章:繁琐任务的自动化(中)——自动批量合并 PDF 文档
  • 大模型×垂直领域:预算、时间、空间三重夹击下的生存法则
  • 2.2 vue2子组件注册使用
  • 西门子PLC S7-1200单轴步进控制电动机
  • Axure设计Web端新增表单页面模板案例
  • 【LeetCode 热题 100】215. 数组中的第K个最大元素——(解法一)快速选择
  • 安卓逆向(基础①-Google Pixel-Root)
  • Visual Studio 2022安装与快捷键全攻略
  • 模型蒸馏(Distillation):原理、算法、应用
  • 【达梦MPP(带主备)集群搭建】
  • Selenium教程(Python 网页自动化测试脚本)
  • 华为2288H V5服务器闪红灯 无法开机案例