redis规定集合长度_搞定面试必问的Redis数据结构!!(四)

本文深入解析Redis中的对象结构,探讨不同数据类型的多种编码方式,包括String的embstr和raw编码,List的ziplist和linkedlist,Hash的ziplist和哈希字典,Set的整数集合和哈希字典,以及ZSet的压缩列表和跳跃表+哈希字典。通过编码优化,Redis实现了高效内存管理和操作性能。
摘要由CSDN通过智能技术生成

edc62c960864e696fe7b5843eeb9188a.png

前言

本文是Redis数据结构详解系列的最终篇。Redis数据结构详解(三)我们介绍了跳跃表与压缩列表,本篇将着重Redis的对象以及他们的编码方式。

Redis的对象

Redis中每一个对象都由一个redisObject结构表示。其定义如下:

typedef struct redisObject {
    // 对象类型
    unsigned type:4;
    // 对象编码
    unsigned encoding:4;
    // LRU,用于过期淘汰策略
    unsigned lru:LRU_BITS;
    // 对象被引用次数
    int refcount;
    // 指向底层实现数据的指针
    void *ptr;
} robj;

图示如下:

1f4da675bd192b3058483421ae4fa025.png
  • type: 表示对象的类型,Redis支持的对象类型可以有String,List,Hash,Set以及ZSet
  • encoding: 表示对象的编码,即对象底层实现的数据结构,后续会陆续介绍。
  • refcount: 对象被引用的次数,Redis的对象回收使用的是引用计数法回收机制。
  • ptr: 指向对象底层数据的指针

由上我们也可以发现,一个对象可以有多种编码方式。在Redis中,基本上所有的对象都由两种或两种以上的编码方式,根据不同的场景使用不同的编码方式,可以提高运行效率的同时节省一定的内存空间。

字符串对象(String)

字符串对象的编码方式可以有三种,分别是 intraw,embstr

  • 当字符串对象只保存了整数类型时,Redis会将编码类型设为int,使用Long整数类型保存数据
  • 当字符串保存的是一个字符串值,并且这个字符串值大于39字节,Redis会将编码类型设置为raw,使用SDS数据结构保存数据。
  • 当字符串保存的是一个字符串值,并且这个字符串值小于等于39字节,Redis会将编码类型设置为embstr,也使用SDS数据结构保存数据。

embstr 与 raw 编码的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值