zoukankan      html  css  js  c++  java
  • LRU算法

    LRU,Least recently used[最近最少使用算法],该算法【或变种】被广泛用于缓存管理中,其设计思想是基于:经常被访问的数据在未来一段时间也会被访问,最近最少被访问的数据在未来一段时间内也将不会被访问;因此在缓存空间不足时可将最近最少被访问的数据移除空间。

    最初设计很简单,可如下图所示,只对一个链表进行操作:

    缓存污染,即是数据操作中存在大量的数据插入和更新时,可能会使大量的热点数据流失而大大降低缓存命中率。

    上述设计的优点:算法实现简单,

    缺点:抗干扰能力差,缓存移动的时间复杂度为:O(n).

    LRU-K算法,即数据被访问K次才会被放入LRU队列,至于放置的位置可放于队首,也可放于队中。要实现LRU-K算法,要维护一个数据访问历史队列以用于判断数据是否满足被访问K次的条件。大致可如下图所示:

    该设计的优点:缓存抗干扰能力强,缓存命中率高。

    缺点:增加了算法实现和维护的复杂度,算法的空间复杂度为2N,时间复杂度为2N。

    另一种设计:可提供较强的缓存抗干扰能力,而且算法的实现比较简单,并且算法的空间复杂度为N,时间复杂度为1.设计思想见下图:

  • 相关阅读:
    运输装备(codevs 1669)
    考前复习(codevs 2837)
    2014编程之美初赛第一场
    51系列小型操作系统精髓 简单实现
    数学----有趣的扑克牌《一》
    hadoop编程:分析CSDN注冊邮箱分布情况
    [动态规划]UVA437
    Swift学习笔记四:数组和字典
    [动态规划]UVA10285
    freemarker中的left_pad和right_pad
  • 原文地址:https://www.cnblogs.com/itdev/p/6079610.html
Copyright © 2011-2022 走看看