三种形式:int(8个字节的长整型)、embstr(<=44字节字符串)、raw(>44字节字符串)
其中embstr和raw都是用redisObject和sds保存数据,根据radis内存分配策略,jemalloc分配大于48,小于64个
字节的情况会统一分配64个字节,所以embstr使用这一特性,将redisObject和数据存放在一起,redisObject对象占16个字节,sds剩余48个字节
3.2之后,sds结构为4+字符长度,所以embstr存储小于等于44个字节的数据
(3.2之前,sds为9(\0+len+free)+字符串长度,长度为39).
embstr长度增加需要重新分配内存时,需要重新分配redisObject和sds,所以embstr为只读。
embstr分配一次内存空间,redisObject和sds在一起
raw分配两次, 需要分配redisObject和sds。
本文详细解析了Redis中三种数据结构:int、embstr和raw的实现原理。embstr利用jemalloc特性,与redisObject共存,适用于≤44字节的只读字符串。raw则适用于>44字节的数据,分配方式更为灵活。
251

被折叠的 条评论
为什么被折叠?



