• 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/

  • 相关阅读:
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(3)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(2)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(1)
    python将项目文件打包发布的脚本(保留原来的项目结构)
    .net stream 转成 bytes[] 的实例和注意事项
    大区间素数筛选(POJ 2689)
    B. Duff in Love
    A. Duff and Meat
    NEFU_117素数个数的位数
    HDU_5504 GT and sequence
  • 原文地址:https://www.cnblogs.com/space007/p/6114558.html
Copyright © 2020-2023  润新知