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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    代码编译时JDK版本和运行时JDK版本不一致启动项目报错
    Apache 环境变量配置
    Android NDK 环境变量配置
    Android SDK 环境变量配置
    JAVA 环境变量配置
    FFmpeg Download
    JAVA SE Download
    VS 2015 Download
    BASS HOME
    C++11的闭包(lambda、function、bind)
  • 原文地址:https://www.cnblogs.com/itdev/p/6079610.html
Copyright © 2011-2022 走看看