zl程序教程

您现在的位置是:首页 >  其它

当前栏目

【Memcache】Learning From Memcache

from learning memcache
2023-09-14 08:59:22 时间

1. 内存存储:

  Memcache使用Slab Allocaiton内存存储机制:

  通常的内存管理方式,对所有记录进行简单的malloc和free会导致内存碎片,所以像Windows将内存分块(chunk), 每个chunk128bype。Memcache将分配的内存分割成各种尺寸的chunk,并把尺寸相同的块分组(chunk的集合)。分配到的内存不会释放,而是重复利用。

 

  • 在Slab中缓存记录的原理:memcached根据收到的数据的大小,选择最适合数据大小的slab。memcached中保存着Slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中
  • 存在的问题:由于分配的是特定长度的内存,因此无法有效利用分配的内存,例如将100字节的数据缓存到128字节的chunk中,剩余的28字节就浪费了。
  • 解决之道:使用Growth Factor进行调优 
  • 使用Growth Factor进行调优:memcached在启动时指定Growth Factor因子(通过-f选项),就可以再某种程度上控制slab之间的差异。默认值为1.25。在该选项出现之前,这个因子曾经是2,称为‘power of 2’,但可以看出在128字节之后,差别比较大。为了尽量减少浪费,所以有了Growth Factor。
  • Lazy Expiration:memcached内部不会监视记录是否过期,而是在get时查看记录的Timestamp, 检查记录是否过期,这种技术被称为lazy expiration。所以,memcached不会再过期监视上耗费CPU时间。【在以后的开发中也可以使用这样的技术,不加大cup的消耗】
  • LRU: 从缓存中有效删除数据的原理:memcached会优先使用已超时的记录的控件,但实际如此,也会发生追加新记录时控件不足的情况,此时就要使用LRU机制来分配空间。当memcached的内存空间不足时,就从最近未被使用的记录中搜索,并将空间分配给新的记录