zoukankan      html  css  js  c++  java
  • LRU与LFU

    一 概念

    LRU:最近最少使用淘汰算法(Least Recently Used)。LRU是淘汰最长时间没有被使用的数据

    LFU:最不经常使用淘汰算法(Least Frequently Used)。LFU是淘汰一段时间内,使用次数最少的数据

    二 区别

    LRU关键是看最后一次被使用到发生替换的时间长短,时间越长,就会被淘汰;而LFU关键是看一定时间段内被使用的频率(次数),使用频率越低,就会被淘汰

    LRU算法适合:较大的文件比如游戏客户端(最近加载的地图文件)

    LFU算法适合:较小的文件和教零碎的文件比如系统文件、应用程序文件

    LRU消耗CPU资源较少,LFU消耗CPU资源较多

    三实现

    LRU实现:

    • 新数据插入到链表头部
    • 每当缓存命中(即缓存数据被访问),则将数据移到链表头部
    • 当链表满的时候,将链表尾部的数据丢弃

    LRU具备的操作:

    • set(key, value):如果key在hashmap中存在,则先重置对应的value值,然后获取对应的节点cur,将cur节点从链表删除,并移动到链表的头部;若果key在hashmap不存在,则新建一个节点,并将节点放到链表的头部。当Cache存满的时候,将链表最后一个节点删除即可
    • get(key):如果key在hashmap中存在,则把对应的节点放到链表头部,并返回对应的value值;如果不存在,则返回-1

    LFU具备的操作:

    • set(key, value):插入或修改缓存,如果key已存在,则将它对应的值改为value;如果key不存在,则插入键值对t(key, value),当缓存达到容量capacity时,则应该在插入新的键值对之前,删除使用频次最低的键值对。如果最低的键值对有多个,则删除其中最旧的那个
    • get(key):会去缓存中查询键key,如果key存在,则返回key对应的value,否则返回 -1
    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    nefu17
    杭电1051
    杭电1050
    有关异或符号'^'在c++编程中的应用的讲解!!!
    杭电2095
    杭电2094
    关于set容器的简单讲解!!!
    拍拍开发
    收藏框架
    js form.submit() 无效
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15259578.html
Copyright © 2011-2022 走看看