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为分界线。
优势:
采用这个方式可以减少内存分配的次数,提高内存分配的效率,降低内存碎片率。
Redis五种数据结构的底层实现
最新推荐文章于 2024-08-16 22:56:27 发布