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为分界线。

  • 优势:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值