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

文章目录

  • 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 从0到1完整学习 (十):RedisObject 数据结构_第1张图片
Redis 的 redisObject 是 Redis 数据库中用于存储各种类型数据的基础数据结构。它包含了以下几个关键字段:

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

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

编号 编码方式 说明
0 OBJ_ENCODING_RAW raw 编码动态字符串
1 OBJ_ENCODING_INT long int 的字符串
2 OBJ_ENCODING_HT hash 表
3 OBJ_ENCODING_ZIPMAP 已废弃
4 OBJ_ENCODING_LINKEDLIST 双端链表(linkedList)
5 OBJ_ENCODING_ZIPLIST 压缩列表(zipList)
6 OBJ_ENCODING_INTSET 整数集合
7 OBJ_ENCODING_SKIPLIST 跳表(skipList)
8 OBJ_ENCODING_EMBSTR embstr 的动态字符串
9 OBJ_ENCODING_QUICKLIST 快速列表(quickList)
10 OBJ_ENCODING_STREAM Stream 流
  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 数据结构》

你可能感兴趣的:(云原生相关分享,redis,学习,数据结构,运维,数据库)