Memcache内存管理原理

3 篇文章 0 订阅
3 篇文章 0 订阅
内存的碎片化

C语言中,直接malloc,free 来向操作系统申请和释放内存时,不断的申请和释放过程中,形成了一些很小的内存片段,无法再利用。这种无法利用内存的现象—称之为内存的碎片化。

Memacache如何克服内存碎片化
  • memcached 用slab allocator 机制来管理内存。
  • 原理:预先把申请到的内存划分成数个slab class仓库(即不同尺寸的小块)
    如下图所示
    在这里插入图片描述
  • 需要内存时,判断内容大小,为器选择合理的块。
    备注:如果选到的块为100byte,而内容为80byte,那么20byte,是无法利用的(即浪费了)如果100byte已经满了,不会寻找更大的120byte的仓库存储,会把相应的100byte的仓库中的旧数据剔除掉。
Memcached 增长因子

memcached在启动时,可以通过-f选项指定Growth Factor因子,并在某种程度上控制slab之间的差异。(默认值:1.25)

Memcache的删除机制
  • 当某个值过期后,并没有从内存删除,因此,stats统计时,curr_item有其信息
  • 当某个新支去占用他的位置时,当成空chunk来占用
  • 当get值时,判断是否过期,如果过期,返回空,并且清空,curr_item就减少了。
    备注:过期,只是用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除。这个称为lazy expiration(惰性失效)—节省了cpu时间和检测的成本。
lru删除机制

原理:当某个单元被请求时,维护一个计数器,通过计数器来判断最近谁最少被使用,就把谁剔除。
:即时某个key被设置为永久有效,也一样会被剔除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值