MemCache的LRU删除机制详解

  本节主要讲解一下MCLRU的删除机制和一些参数的限制

  MC的过期数据惰性删除

  1.当某个值过期后,并没有从内存中删除,因此,我们在进行st ats统计信息的时候,curr_items有其信息(它的数据并没有减少)

  可以看到nameweb里面并没有数据

  但curr_items却为1,再次flush all 发现curr_items还是为1

    新加一个键值对 name

  10秒时间过期以后,发现curr_items还为1,但是当get name的时候已经没有了,

  get name后触发了这个机制,curr_items变成了0

   2.当某个新值去占用他的位置的时候,当成空chunk来占用

  3.get key值得时候,先判断key是否过期,如果过期,返回空,并且清空,curr_items就减少了

  即--这个过期,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存中删除。

  所以我们把这个成为lazy expire ,即我们常说的这个惰性失效

  好处是:节省了cpu的时间和检测的成本。

  MCLRU删除机制

  假如我们以122字节大小的chunk举例,122chunk都满了,又有新的值(长度也为122)要加入,那么要挤掉谁?

  MC这时使用的是LRU的删除机制

  注:操作系统的常用内存管理,经常使用的算法是FIFOLRU算法

  lruleast recently used 最近最少使用

  fifofirst infirst out (先进先出)

  LRU原理:当某个单元被请求的时候,维护一个计数器,通过计数器来判断最近谁最少使用,那就把谁踢出去。

  注:即使某个key设置的永久有效,也会被踢出来,这个就是永久数据被踢的现象。

  一些参数的限制

  key的长度:250字节(注:二进制的协议支持65536个字节)

  value的限制:1M,那我们一般都是存储一些文本,应该是足够了。

  假设有30g的数据要缓存,一般也不会将30g的数据缓存到一个实例中(不要把鸡蛋都放到一个篮子里)尽可能在资源充足的情况下,尽可能把数据放到不同的机器上去

一般建议是开启多个实例(可以是不同的机器,或者是在同台机器上的不同端口)

 

原文链接:http://www.maiziedu.com/wiki/memcache/lru/

原文地址:https://www.cnblogs.com/space007/p/6114558.html