面试宝典系列-memcache的过期回收内存机制

有些话、适合烂在心里 提交于 2020-04-10 11:47:45

memcache不会释放内存,而是重新利用。

memcache是一个lazy的删除模式,

1、需要新的对象请求入驻这个chunk(存放块)

2、过期的对象被get的时候才会清除

那当所有给memcache的内存都被占用了,这个时候,memcache有两个设置,要么报错,要么,就是用 LRU方法,把last recently used的数据清除出去,也就是删除近段时间最少使用的同规格chunk。

 

这个时候就会引发应外一个问题,就是当你chunk大小设置不合理的时候,比如slab20的 chunk大小非常大,一开始占用了很多内存,但是之后不论是否过期,不被再次利用到的时候就一直处于内存中,这样,当比较小的slab1中的chunk 满了,也没有内存新建slab并分割和slab1同样规格的chunk的时候,memcached就要启动LRU,来清理这个slab下的数据。那这种情 况就会造成在内存的极大程度浪费和cache命中率下降,是某些关键性的数据总是在内存中进进出出,得不到持久的保存。


关于memcache的内存分配机制,请关注下期

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!