码迷,mamicode.com
首页 > 其他好文 > 详细

Redis 内存模型

时间:2020-01-22 14:53:23      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:键值   简单   键值对   碎片   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. 关注内存碎片比例;

Redis 内存模型

标签:键值   简单   键值对   碎片   ext   存在   字符串   一个   回收   

原文地址:https://www.cnblogs.com/ruhuanxingyun/p/12228361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!