redis 从0到1完整学习 (十):RedisObject 数据结构

news/2024/8/19 9:47:14

文章目录

  • 1. 引言
  • 2. redis 源码下载
  • 3. redisObject 数据结构
  • 4. 参考


1. 引言

前情提要:
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》
《redis 从0到1完整学习 (四):字符串 SDS 数据结构》
《redis 从0到1完整学习 (五):集合 IntSet 数据结构》
《redis 从0到1完整学习 (六):Hash 表数据结构》
《redis 从0到1完整学习 (七):ZipList 数据结构》
《redis 从0到1完整学习 (八):QuickList 数据结构》
《redis 从0到1完整学习 (九):SkipList 数据结构》

本文主要结合源码来介绍 RedisObject 的数据结构

2. redis 源码下载

Redis 源码可以点击这里下载,方便查看其中定义的一些数据结构。
在这里插入图片描述

3. redisObject 数据结构

通过 redisObject 结构,Redis 能够灵活地处理不同类型和大小的数据,并且能够在内存管理和性能优化方面进行精细控制。这个数据结构是 Redis 高效性和灵活性的重要基础。

以下是源码的定义:
在这里插入图片描述
Redis 的 redisObject 是 Redis 数据库中用于存储各种类型数据的基础数据结构。它包含了以下几个关键字段:

  1. type: 这是一个4比特的字段,表示对象的类型。它可以是以下几种类型之一:

    • REDIS_STRING(字符串)
    • REDIS_LIST(列表)
    • REDIS_HASH(哈希)
    • REDIS_SET(集合)
    • REDIS_ZSET(有序集合)
  2. encoding: 这是一个4比特的字段,表示对象的编码方式。不同的数据类型可以有不同的编码方式,以优化存储和操作效率。例如,对于列表类型,可能的编码方式包括 ziplist(压缩列表)和 linkedlist(双端链表),如下:

编号编码方式说明
0OBJ_ENCODING_RAWraw 编码动态字符串
1OBJ_ENCODING_INTlong int 的字符串
2OBJ_ENCODING_HThash 表
3OBJ_ENCODING_ZIPMAP已废弃
4OBJ_ENCODING_LINKEDLIST双端链表(linkedList)
5OBJ_ENCODING_ZIPLIST压缩列表(zipList)
6OBJ_ENCODING_INTSET整数集合
7OBJ_ENCODING_SKIPLIST跳表(skipList)
8OBJ_ENCODING_EMBSTRembstr 的动态字符串
9OBJ_ENCODING_QUICKLIST快速列表(quickList)
10OBJ_ENCODING_STREAMStream 流
  1. ptr: 这是一个指针字段,指向实际的数据值。根据对象的类型和编码方式,这个指针可以指向不同类型的内部数据结构。

  2. refcount: 这是一个整数字段,表示对象的引用计数。每当有新的键或者其他对象引用这个对象时,引用计数加一;当不再有引用时,引用计数减一。当引用计数降为0时,对象将被垃圾回收机制释放。

  3. lru: 这是一个 24 比特的字段,用于记录对象的最近使用时间(LRU,Least Recently Used)。在 Redis 的内存管理中,LRU 字段可以帮助确定哪些对象是最少使用的,以便在内存不足时进行淘汰。

4. 参考

《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》
《redis 从0到1完整学习 (四):字符串 SDS 数据结构》
《redis 从0到1完整学习 (五):集合 IntSet 数据结构》
《redis 从0到1完整学习 (六):Hash 表数据结构》
《redis 从0到1完整学习 (七):ZipList 数据结构》
《redis 从0到1完整学习 (八):QuickList 数据结构》
《redis 从0到1完整学习 (九):SkipList 数据结构》


http://lihuaxi.xjx100.cn/news/1920447.html

相关文章

鸿蒙Harmony(八)ArkUI--状态管理器之@State

状态管理 在声明式UI中,是以状态驱动视图更新 状态:指驱动视图更新的数据(被装饰器标记的变量) StateProp 和 LinkProvide和 Consume State State装饰器标记的变量必须初始化,不能为空值State支持Object 、class、…

MIT线性代数笔记-第31讲-线性变换及对应矩阵

目录 31.线性变换及对应矩阵打赏 31.线性变换及对应矩阵 线性变换相当于是矩阵的抽象表示,每个线性变换都对应着一个矩阵 例: 考虑一个变换 T T T,使得平面上的一个向量投影为平面上的另一个向量,即 T : R 2 → R 2 T:R^2 \to R…

腾讯云轻量应用服务器购买流程(两种方式)

腾讯云轻量应用服务器购买指南,有两个入口,一个是在特价活动上购买,一个是在轻量应用服务器官方页面购买,特价活动上购买价格更便宜,轻量2核2G3M带宽服务器62元一年起,阿腾云atengyun.com分享腾讯云轻量应用…

成考生必看!2023年成人高考录取后入学拿证流程

成人高考录取后并不是就可以坐等拿证了! 成人高考录取后你还有这些事情要做。 一起来了解一下吧! 成人高考入学到拿证流程 办理入学流程 1.入学时间 确认被高校录取后,12月下旬左右开始办理入学(实际时间以各院校安排为准) 2.缴…

DDP分布式训练的官方demo及相关知识

参考链接 1.分布式训练:并行化,跨进程和跨集群的计算 2.torch.distributed.init_process_group() 来初始化进程组,需要指定worker的通信机制,一般为nccl(NVIDIA推出),1个进程对应1个gpu.nccl是nvidia的显卡通信方式,用于把模型参数…

ts中的任意接口

interface Persontest {name:string;[key:string]:any } var psss:Persontest{name:1,age:10,sex:男,[Symbol()]:灵境胡同 }ts中,[Symbol()] 是一个计算属性名称的语法,可以在对象字面量中使用 Symbol 类型来动态地生成属性名称,[Symbol()] 生…

react 代数效应 和 vue vm思想

前言 React 的代数效应和 Vue 的 VM 思想是两种不同的编程模型,它们都试图解决 UI 开发中的一些挑战,如副作用管理、状态同步、组件抽象等。 React 的代数效应 是指将副作用从函数调用中分离,使函数关注点保持纯粹,同时通过代数运…

ChatGPT4助力Python数据分析与可视化、人工智能建模及论文高效撰写

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其在…