Redis 内存模型

1. 当我们执行set hello world命令时,会有以下数据模型

  A. sds:sds是简单动态字符串,键hello是以SDS存储的;

  B. redisobject:值world存储在redisobject中,实际上,redis的5中类型都是存在redisobject中,而redisobject中type字段指明了value对象的类型,ptr字段则指明了对象所在的地址,该对象非常重要,Redis对象的类型、内部编码、内存回收、共享对象等功能,都需要redisobject支持;

  C. dictEntry:Redis给每个key-value键值对分配一个dictEntry,里面有着key和val的指针,next指向下一个dictEntry形成链表,这个指针可以将多个哈希值相同的键值对链接在一起;

  D. 无论是dictEntry,还是redisobject、sds对象,都需要内存分配器(如jemalloc分配)内存进行存储,jemalloc在64位操作系统中,将内存空间划分为小、中、巨大三个范围,每个范围又划分了许多小的内存块单元,当Redis存储数据时,会选择大小最合适的内存块进行存储;

  E. Redis支持的5种对象类型,每种结构都至少有两种编码。

2. 优化内存占用

  A. 尽量使用整形替代字符串;

  B. 尽可能使用共享对象;

  C. 关注内存碎片比例;

你可能感兴趣的:(Redis 内存模型)