码迷,mamicode.com
首页 > 其他好文 > 详细

底层:字符串

时间:2019-09-15 10:44:39      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:内存优化   字符串长度   mic   整数   长度   大内存   数据类型   形式   数组   

底层:字符串

redis的字符串是一种SDS(simple dynamic string),类似ArrayList,有三个字段(大小、容量、标志位)和一个字符串组成,分配数组的长度和字符串的长度可以不同。

扩容

如果进行append操作数组就要进行扩容,如果字符串很大内存分配和复制开销就会很大。redis规定字符串最长不能超过512M,创建字符串时分配数组和实际长度相同,因为append大多数情况下不会发生。字符串在小于1M时,扩容加倍,大于1M后每次只加1M。

存储形式:emb和raw

字符串在长度很短时采用emb形式存储,字符串长度超过44字节(实际对象头+字符串共64字节)用raw形式存储。embstr它将redisobject对象头和SDS对象存在一块连续的空间,而raw对象头和字符串不在一起,如果对象头和字符串加起来超过64字节,redis认为它是大字符串(这个数字和内存分配整数倍有关),此时真正的字符串长度也就只有44字节(对象头占16字节,字符串中的长度、容量和标志位占3字节,64-16-3=44)。

对象头里面存储了数据类型、存储形式、LRU、引用计数和指向数据的指针。

对字段的优化

redis对内存优化是极致的,当字符串很短时,数组长度和实际长度字段会用byte和short类型来节省空间。

底层:字符串

标签:内存优化   字符串长度   mic   整数   长度   大内存   数据类型   形式   数组   

原文地址:https://www.cnblogs.com/shizhuoping/p/11521158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!