标签:键值 简单 键值对 碎片 ext 存在 字符串 一个 回收
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. 关注内存碎片比例;
标签:键值 简单 键值对 碎片 ext 存在 字符串 一个 回收
原文地址:https://www.cnblogs.com/ruhuanxingyun/p/12228361.html