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的内存分配机制,请关注下期

来源:oschina
链接:https://my.oschina.net/u/3646190/blog/1862595