Redis数据结构(一):RedisObject、String(SDS)

Redis中的所有对象都包含RedisObject头结构,用于存储类型、编码和LRU信息。字符串对象采用SDS(Simple Dynamic String)实现,是动态且可修改的。SDS结构包含长度信息和字节数组,支持预分配冗余空间以减少内存分配。Redis根据字符串长度使用embstr或raw存储方式,embstr适用于较短字符串,避免额外内存分配。对于超过44字节的字符串,使用raw存储并分开分配内存。
摘要由CSDN通过智能技术生成

RedisObject

    所有的 Redis 对象 都有下面的这个头结构。不同的对象具有不同的类型 type (4bit)。同一个类型的 type 会有不同的存储形式 encoding (4bit)。为了记录对象的 LRU 信息,使用了 24 个 bit 来记录 LRU 信息。每个对象都有个引用计数,当引用计数为零时,对象就会被销毁,内存被回收。ptr 指针将指向对象内容(body)的具体存储位置。这样一个 RedisObject 对象头结构 需要占据 16 字节的存储空间。

struct RedisObject {
    
    int4 type;       // 4bit
    int4 encoding;   // 4bit
    int24 lru;       // 24bit
    int32 refcount;  // 4bytes
    void *ptr;       // 8bytes, 64-bit system
} robj;

String (SDS)

    C 语言里面的字符串标准形式是以 NULL (即 0x\0)作为结束符,但是在 Redis 里面字符串不是这么表示的。因为要获取以 NULL 结尾的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值