概述
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五种数据结构的底层实现的全部内容,希望文章能够帮你解决Redis五种数据结构的底层实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复