Redis五种数据结构的底层实现

Redis五种数据结构的底层实现_第1张图片

embstr编码的动态字符串:

  • 从Redis 3.0版本开始字符串引入了EMBSTR编码方式,长度小于OBJ_ENCODING_EMBSTR_SIZE_LIMIT(39)的字符串将以EMBSTR方式存储
  • EMBSTR方式的意思是 embedded string ,字符串的空间将会和redisObject对象的空间一起分配,两者在同一个内存块中
  • Redis中内存分配使用的是 jemalloc,jemalloc 分配内存的时候是按照 8、16、32、64 作为 chunk 的单位进行分配的。
  • 为了保证采用这种编码方式的字符串能被 jemalloc 分配在同一个 chunk 中,该字符串长度不能超过64

  • 故字符串长度限制 OBJ_ENCODING_EMBSTR_SIZE_LIMIT = 64 - sizeof('0') - sizeof(robj) 为16 - sizeof(struct sdshdr)为8 = 39

    • 注意在Redis 3.2之后,就不是以39为分界线,而是以44为分界线。

  • 优势:

    • 采用这个方式可以减少内存分配的次数,提高内存分配的效率,降低内存碎片率。

  • 底层的实现:https://blog.csdn.net/Future_LL/article/details/88525004

你可能感兴趣的:(Redis)