我是靠谱客的博主 勤恳小丸子,最近开发中收集的这篇文章主要介绍Redis五种数据结构的底层实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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五种数据结构的底层实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部