memcache内存处理机制

/**
  内存处理机制
  内存删除机制
*/
1.内存存在缓存碎片化的缺陷
memcached使用了slab allocator 分配机制
原理:
该机制就是把内存分割成了大小不一的块。术语就是,把内存分成了大小不一的 slab 和 chunks 。chunks包含在slabs中
memcached根据收到的数据的大小。选择较为合适的内存块,存数据。但是也是会造成内存浪费。这个问题只能缓解,不能克服。
如果有 100bit 要存放 122 仓库中,那么 22bit 就浪费了,没办法。
但是,如果连 122仓库 都没有了怎么办?并不会寻找更大的 144仓库。而是把 122仓库 中的老数据踢掉。使用数据过期和数据删除机制。


2.自增长因数(尽量的缓解碎片化)
grow factor  默认 1.25 。当然我们可以自己设置合理的增长因子
slab 中的 chunk 存放的内存,是按照增长因子来递增的


3.数据  失效机制  和  删除机制
惰性失效机制
1.当某个值过期之后。并没有从内存中删除。所以stats统计的时候。curr_item 还有信息。(当然total_item中也有)
2.如果之前一直没有get,就不会自动删除。
3.当get他的值得时候,判断是否过期。如果过期。返回空,并且清空,所以curr_item就减少了
4.当有新值取占用他的位置的时候,就会清空他。


所以。过期只是用户看不到了。
并没有从内存中删除。这种失效叫做 惰性失效。lazy expiration
好处是节省了CPU时间 和检测的成本。需要用到的时候再回检测


删除机制 (LRU删除机制)
存储 100bit,如果 122bit chunk都满了。那么要把谁给踢掉?怎么踢?使用什么原则?
memcached 此处使用 LRU删除机制
FIFO删除机制 ===> first in, first out 先来先走
LRU删除机制  ===> Least Recently Used 最近最少使用的先走
即使过期时间设置的是0.也可以说是永久有效,照样会被踢出













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值