zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    极光推送的设备唯一性标识 RegistrationID
    排行榜算法设计实现比较 排序树 平衡二叉树
    UCloud首尔机房整体热迁移是这样炼成的
    from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
    客户续费模型 逻辑回归 分类器 AdaBoost
    推举算法 AdaBoost 哥德尔奖 Godel Prize
    基于 redis 的分布式锁实现 Distributed locks with Redis debug 排查错误
    Django’s cache framework
    随机森林算法预测法官判决
    时间特征正弦化
  • 原文地址:https://www.cnblogs.com/space007/p/6114558.html
Copyright © 2011-2022 走看看