深入了解一下Redis的内存模型!
字符串类型的内部编码有3种,它们的应用场景如下:
示例如下图所示: embstr和raw进行区分的长度,是39;是因为redisObject的长度是16字节,sds的长度是9+字符串长度;因此当字符串长度是39时,embstr的长度正好是16+9+39=64,jemalloc正好可以分配64字节的内存单元。 (3)编码转换 当int数据不再是整数,或大小超过了long的范围时,自动转化为raw。 而对于embstr,由于其实现是只读的,因此在对embstr对象进行修改时,都会先转化为raw再进行修改,因此,只要是修改embstr对象,修改后的对象一定是raw的,无论是否达到了39个字节。示例如下图所示: 2、列表 (1)概况 列表(list)用来存储多个有序的字符串,每个字符串称为元素;一个列表可以存储2^32-1个元素。Redis中的列表支持两端插入和弹出,并可以获得指定位置(或范围)的元素,可以充当数组、队列、栈等。 (2)内部编码 列表的内部编码可以是压缩列表(ziplist)或双端链表(linkedlist)。 双端链表:由一个list结构和多个listNode结构组成;典型结构如下图所示: (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |