美文网首页
Redis之String的内部结构

Redis之String的内部结构

作者: 文萃北 | 来源:发表于2019-06-12 16:14 被阅读0次

Redis 的字符串叫着「SDS」,也就是Simple Dynamic String。它的结构是一个带长度信息的字节数组。

struct SDS<T> {
T capacity; // 数组容量
T len; // 数组长度
byte flags; // 特殊标识位,不理睬它
byte[] content; // 数组内容
}
这个和Java的ArrayList 差不多,capacity是分配数组的长度,len表示数组长度,content是表示内容。默认capacity和len长度是相同的。 如果要用append操作字符串, 按需调整空间,如果 capacity 不够容纳追加的内容,就会重新分配字节数组并复制原字符串的内容到新数组中。

embstr vs raw

Redis 的字符串有两种存储方式,在长度特别短时,使用 emb 形式存储 (embeded),当长度超过 44 时,使用 raw 形式存储。如下图:


image.png

*** embstr和Row区别


image.png

这是为啥呢?了解一下Redis的结构体

struct RedisObject {
int4 type; // 4bits
int4 encoding; // 4bits
int24 lru; // 24bits
int32 refcount; // 4bytes
void *ptr; // 8bytes,64-bit system
} robj;
一个Redis对象头需要最少16字节的存储空间。当字符串比较小的时候,SDS对象头的大小capacity+3,至少是3,意味一个字符串最小空间是19字节。而分配内存的时候,内存分配的单位是 2、4、8、16、32、64 等等。
当内存分配器分配了 64 空间时,那这个字符串的长度最大可以是44(64-19)。

相关文章

  • Redis之String的内部结构

    Redis 的字符串叫着「SDS」,也就是Simple Dynamic String。它的结构是一个带长度信息的字...

  • redis数据结构总结

    string redis的字符串是动态字符串,内部结构实现类似于java的arraylist 其次,redis采用...

  • redis

    String 在Redis中String是可以修改的,称为动态字符串。说是字符串但它的内部结构更像是一个 Arra...

  • Redis-String内部结构

    SDS-动态字符串 Redis中的字符串叫SDS (Simple Dynamic String),结构是一个带长度...

  • Redis-数据结构

    Redis有5种基本数据类型 string(字符串) 键值对 计数 扩容: 【字符串】内部结构 list(列表) ...

  • 02-Redis 操作之String操作

    Redis 操作之String操作 String操作,redis中的String在在内存中按照一个name对应一个...

  • redis学习系列(二)

    redis简单操作之string类型 Redis 数据类型 Redis支持五种数据类型:string(字符串),h...

  • 4.2-Redis6数据结构之String类型介绍和应用场景—小

    Redis6数据结构之String类型介绍和应用场景 简介:Redis6数据结构之String类型介绍和应用场景 ...

  • 彻底了解Redis基础数据结构

    String 字符串 Redis字符串是简单动态的字符串,是可以修改的字符串,内部结构上实现了类似于Java的Ar...

  • SpringBoot-Redis 入门

    SpringBoot-Redis 入门 Redis 的数据类型 String 字符串 string 是 redis...

网友评论

      本文标题:Redis之String的内部结构

      本文链接:https://www.haomeiwen.com/subject/robvtctx.html