深入了解一下Redis的内存模型!
下图是执行set hello world时,所涉及到的数据模子。 (1)dictEntry:Redis是Key-Value数据库,因此对每个键值对城市有一个dictEntry,内里存储了指向Key和Value的指针;next指向下一个dictEntry,与本Key-Value无关。 (2)Key:图中右上角可见,Key(”hello”)并不是直接以字符串存储,而是存储在SDS布局中。 (3)redisObject:Value(“world”)既不是直接以字符串存储,也不是像Key一样直接存储在SDS中,而是存储在redisObject中。现实上,岂论Value是5种范例的哪一种,都是通过redisObject来存储的;而redisObject中的type字段指明白Value工具的范例,ptr字段则指向工具地址的地点。不外可以看出,字符串工具固然颠末尾redisObject的包装,但如故必要通过SDS存储。 现实上,redisObject除了type和ptr字段以外,尚有其他字段图中没有给出,如用于指定工具内部编码的字段;后头会具体先容。 (4)jemalloc:无论是DictEntry工具,照旧redisObject、SDS工具,都必要内存分派器(如jemalloc)分派内存举办存储。以DictEntry工具为例,有3个指针构成,在64位呆板下占24个字节,jemalloc会为它分派32字节巨细的内存单位。 下面来别离先容jemalloc、redisObject、SDS、工具范例及内部编码。 2、jemalloc Redis在编译时便会指定内存分派器;内存分派器可所以 libc 、jemalloc可能tcmalloc,默认是jemalloc。 jemalloc作为Redis的默认内存分派器,在减小内存碎片方面做的相比拟力好。jemalloc在64位体系中,将内存空间分别为小、大、庞大三个范畴;每个范畴内又分别了很多小的内存块单元;当Redis存储数据时,会选择巨细最吻合的内存块举办存储。 jemalloc分另外内存单位如下图所示:
譬喻,假如必要存储巨细为130字节的工具,jemalloc会将其放入160字节的内存单位中。 3、redisObject 前面说到,Redis工具有5种范例;无论是哪种范例,Redis都不会直接存储,而是通过redisObject工具举办存储。 redisObject工具很是重要,Redis工具的范例、内部编码、内存接纳、共享工具等成果,都必要redisObject支持,下面将通过redisObject的布局来声名它是怎样起浸染的。 redisObject的界说如下(差异版本的Redis也许稍稍有所差异): redisObject的每个字段的寄义和浸染如下: (3.1)type type字段暗示工具的范例,占4个比特;今朝包罗REDIS_STRING(字符串)、REDIS_LIST (列表)、REDIS_HASH(哈希)、REDIS_SET(荟萃)、REDIS_ZSET(有序荟萃)。 当我们执行type呼吁时,即是通过读取RedisObject的type字段得到工具的范例;如下图所示: (3.2)encoding encoding暗示工具的内部编码,占4个比特。 对付Redis支持的每种范例,都有至少两种内部编码,譬喻对付字符串,有int、embstr、raw三种编码。通过encoding属性,Redis可以按照差异的行使场景来为工具配置差异的编码,大大进步了Redis的机动性和服从。以列表工具为例,有压缩列表和双端链表两种编码方法;假如列表中的元素较少,Redis倾向于行使压缩列表举办存储,由于压缩列表占用内存更少,并且比双端链表可以更快载入;当列表工具元素较多时,压缩列表就会转化为更得当存储大量元素的双端链表。 通过object encoding呼吁,可以查察工具回收的编码方法,如下图所示: 5种工具范例对应的编码方法以及行使前提,将在后头先容。 (3.3)lru lru记录的是工具最后一次被呼吁措施会见的时刻,占有的比特数差异的版本有所差异(如4.0版本占24比特,2.6版本占22比特)。 通过比拟lru时刻与当前时刻,可以计较某个工具的空转时刻;object idletime呼吁可以表现该空转时刻(单元是秒)。object idletime呼吁的一个非凡之处在于它不改变工具的lru值。 lru值除了通过object idletime呼吁打印之外,还与Redis的内存接纳有相关:假如Redis打开了maxmemory选项,且内存接纳算法选择的是volatile-lru或allkeys—lru,那么当Redis内存占用高出maxmemory指定的值时,Redis会优先选择空转时刻最长的工具举办开释。 (3.4)refcount (3.4.1)refcount与共享工具 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |