LFU算法族:window-LFU

2023-11-11

LFU算法族相关文章目录汇总:

LFU算法

LFU-Aging算法

window-LFU算法(本文)

1、LFU算法的不足

    LFU(Least Frequently Used)是一种缓存淘汰算法。LFU算法是根据缓存的访问频率,去淘汰访问次数最低的缓存。这样就给LFU带来了两个问题:

  1. 不可避免的问题:对于每个缓存项,LFU都需要记录其访问次数,这导致了LFU需要一笔不小的额外内存开销;
  2. 可一定程度避免的问题:对于记录的访问次数,LFU要对其进行排序,用于淘汰访问次数最低的算法。而对大量数据的排序,则会带来一定的处理器开销。当然,这个开销可以通过在每次操作时调整排序顺序,来避免在内存淘汰时一次发生。

    同时,由于LFU记录的是缓存生成以来访问频率,如果一条缓存曾经访问了很多次,但是如果服务的逻辑发生了改变,这条缓存已经很少甚至不再会被访问,这条缓存由于其历史访问次数很高,依然不会被淘汰。这就导致了缓存污染的问题:

  • 缓存污染:系统将不常用的数据存入到缓存,造成常用数据的挤出,降低了缓存效率的现象。

    总结来说,LFU算法有两个不可避免的问题:

  1. 对于每个缓存项,LFU都需要记录其访问次数,需要不小的额外内存开销;
  2. 近期不再访问的历史数据无法清理,导致缓存污染。

2、window-LFU算法描述

    Window-LFU被用来一定程度上解决LFU上述两步不可避免的问题。

    Window是用来描述算法保存的历史请求数量的窗口大小的。Window-LFU并不记录所有数据的访问历史,而只是记录过去一段时间内的访问历史。即当请求次数达到或超过window的大小后,每次有一条新的请求到来,都会清理掉最旧的一条请求,以保证算法记录的请求次数不超过window的大小。

2.1 缓存访问记录的维护

    在实现时,Window-LFU一般会维护一个定长队列,或者用数组实现环形缓存区来存储访问历史。

    例如:一个缓存场景,window = 9,现在有9条缓存访问记录,按时间顺序从先到后分别是:A,B,C,D,A,B,C,D,A,即缓存队列

    此时又来了一条新的缓存请求B,这是Window-LFU算法就会把第一条缓存访问记录A删掉,并将B加到队尾:

2.2 缓存淘汰

    Window-LFU的缓存淘汰方式和LFU是一致的。

    Window-LFU首先会计算window条记录中各条缓存项的访问次数,然后根据访问次数排序,淘汰次数最少的缓存项。当然,计算缓存想访问次数的操作,也可以放到每次缓存访问记录更新的同时,这样就避免了每次缓存操作的耗时长的问题。

    一般来说,Window-LFU会使用哈希结构来存储“缓存项 <---> 访问次数”的映射,因为哈希的时间复杂度低,为o(1)。

3、Window-LFU的优缺点

3.1 优点

    由于Window-LFU不存储全部历史数据,所以其额外内存开销要明显低于LFU算法,同时由于数据量明显减少,Window-LFU排序的处理器成本也要低于LFU。

    另外,由于早于前window次的缓存访问记录会被清理掉,所以Window-LFU也可以避免缓存污染的问题,因为过早时间访问的缓存已经被清理掉了。

    在缓存命中率方面,Window-LFU一般会由于LFU,因为Window-LFU一定程度上解决了缓存污染的问题,缓存的有效性更高了。缓存污染问题越严重的场景,Window-LFU的命中率就比LFU高的越多。

   另外,和LFU-Aging相比,Window-LFU对缓存污染问题的解决更彻底一些,所以在缓存使用场景产生改变时,命中率会优于LFU-Aging。

3.2 缺点

    但是Window-LFU需要维护一个队列去记录历史的访问流,复杂度略高于LFU。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LFU算法族:window-LFU 的相关文章

  • C# 三菱FX PLC XYS读写,串口读写

    花了两三天写了一个这个 本来想着自己用的 看到有很多替代品 果断开源了吧 下载地址 https github com t39q MitsubishiFX PLC XYS 以下是原理 后面有帮助类和调用方法 调用方法 private void
  • Python通过私信消息提取博主的赠书活动地址

    文章目录 前言 背景 设计 开发 1 引入模块 2 获取私信内容 3 根据文本提取url的方法 4 获取包含 书 的url 5 程序入口 效果 总结 最后 前言 博主 空空star 主页 空空star的主页 大家好 我是空空star 本篇给
  • java canvas 画图片_[Java教程][HTML5] Canvas绘制简单图片

    Java教程 HTML5 Canvas绘制简单图片 0 2016 05 13 13 00 04 获取Image对象 new出来 定义Image对象的src属性 参数 图片路径 定义Image对象的onload方法 调用context对象的d
  • 图的深度优先遍历和广度优先遍历

    1 深度优先遍历 DFS 1 从某个顶点V出发 访问顶点并标记为已访问 2 访问V的其中一个邻接点 通常最左边的那个 如果没有访问过 访问该顶点并标记为已访问 然后再访问该顶点的邻接点 递归执行 先一直往后走 如果该顶点已访问过 退回上一个
  • CAD快捷键——标注类

    CAD快捷键 标注类 直线标注 DLI 空格 斜线标注 DAL 空格 半径标注 DRA 空格 直径标注 DDI 空格 角度标注 DAN 空格 连续标注 DCO 空格 快速连续标注 QDIM 空格 中心标注 DCE 空格 直线标注 DLI 空
  • Windows下的开发辅助神器——Chocolate Package Manager

    对于开发人员而言 搭建开发环境是所有开发环节中的第一步 然而在Windows环境下 各种安装工具 软件版本五花八门 而且容易下载到病毒软件 因此对于初学者来说 下载到正确的开发软件 搭建好开发环境还是有一定难度和技巧性的 Chocolate
  • [已解决]ROS无法连接raw.githubusercontent.com和raw.github.com的问题

    首先通过以下网站查询raw githubusercontent com和raw github com对应的IP https tool lu ip 复制上面的IP 然后通过下面命令打开hosts修改源 sudo vi etc hosts 以下
  • Spring Boot参考教程(七)Spring Boot Jar方式读取资源文件

    5 Spring Boot Jar方式读取资源文件 在2 2 2章节中已说明SpringBoot的一个特性就是独立运行 内嵌Servlet容器 在Spring Boot工程以jar方式独立运行开发时会遇到一些问题 本章节主要说明读取静态资源
  • Reformer RoPE,旋转位置编码,关于Transformer当中的位置编码的优化考察

    1 工作简介 这篇文章是苏剑林的一篇关于Transformer当中的位置编码的优化考察 众所周知 transformer的attention机制本身是不带有位置信息的 因此对于文本序列 attention机制本身就会丢失掉原文当中的序列信息
  • Python二叉树构建(完全二叉树)

    Python完全二叉树的构建 包含广度优先插入节点 广度遍历 先序 中序 后序遍历等函数 class Node object 节点 def init self item self elem item self lchild None sel
  • 【AI目标检测】MMROTATE踩坑记录

    MMROTATE介绍 MMRotate 是一款基于 PyTorch 的旋转框检测的开源工具箱 是 OpenMMLab 项目的成员之一 MMROTATE安装 mmrotate的安装同mmdet等类似 参考mmrotate安装 创建环境 con
  • 单调栈和滑动窗口【题解】

    全文目录 单调栈 代码 滑动窗口 单调队列 代码 单调栈 单调栈 顾名思义就是具有单调性的栈 通常是用来求数组中的左边第一个比自身小或者大的数 使用场景还是比较有限的 但是对于解题还是有着很大的帮助的 我们还是通过题目来进行讲解 对于这种题
  • php一个字段多条件查询,ThinkPHP使用数组条件进行查询之同一字段多个条件

    对同一表中多个字段的查询 在thinkPHP中使用数组条件进行查询 有三个好处 第一可以批量设置多个查询字段 第二可以设置多个查询条件 第三结构化你的代码 让代码更具可读性 数组条件查询有简单数组查询 数组表达式查询 一般使用 map保存数
  • VSCode远程连接Linux服务器时遇到连接超时问题

    1 确保Linux服务器已经安装并运行了SSH服务 可以使用以下命令检查SSH服务的状态 sudo systemctl status ssh 可以设置开机自启 sudo systemctl enable ssh 2 使用ping命令检查ip

随机推荐

  • 快速掌握Nodejs安装以及入门

    一 Nodejs 1 1 Nodejs介绍 官网 http nodejs cn Node 是一个让 JavaScript 运行在服务端的开发平台 它让 JavaScript 成为与PHP Python Perl Ruby 等服务端语言平起平
  • LeetCode小算法记录(二十二)最长回文串

    给定一个包含大写字母和小写字母的字符串 找到通过这些字母构造成的最长的回文串 在构造过程中 请注意区分大小写 比如 Aa 不能当做一个回文字符串 注意 假设字符串的长度不会超过 1010 示例 1 输入 abccccdd 输出 7 解释 我
  • SpringBoot的完整学习

    springBoot 配置如何编写 yaml 自动装配原理 集成web开发 业务的核心 集成数据库 Druid 分布式开发 Dubbo zookeeper swagger 接口文档 任务调度 SpringSecunity Shiro 1 微
  • Fastadmin开源CRM客户管理系统融合开发呼叫中心系统

    基于Fastadmin中开源CRM客户管理系 并支持小程序端UNIapp 统融合开发呼叫中心系统 在crm管理系统中 并实现了来去电弹屏 网页通话等功能 助力企业销售全流程精细化 数字化管理 全面解决企业销售团队的全流程客户服务难题 帮助企
  • 我的第一个半平面交(1007: [HNOI2008]水平可见直线)

    点击打开链接 Description Input 第一行为N 0 lt N lt 50000 接下来的N行输入Ai Bi Output 从小到大输出可见直线的编号 两两中间用空格隔开 Sample Input 3 1 0 1 0 0 0 S
  • Android EditText设置边框

    Android EditText设置边框 简介 Android应用程序中给EditText设置边框 效果图 快速开始 在res drawable目录下新建样式文件 edit background xml
  • iphone彻底删除照片如何恢复_想要从iPhone恢复永久删除的照片,这些方法一定要掌握...

    当你不小心删除了iPhone上的照片 你一定非常伤心难过 因为这些照片都是你生活点滴最好的见证 有你太多的回忆 今天小编将向您展示如何从iPhone恢复已删除的照片 如何在iPhone上还原照片以及防止其再次发生的最佳方法 从iPhone恢
  • 报错:StandardServletMultipartResolver : Failed to perform cleanup of multipart items

    报错 在文件上传接口 解析文件的时候报错 报错信息如下 s w m s StandardServletMultipartResolver Failed to perform cleanup of multipart items java i
  • idea工程在maven projects中显示灰色的解决办法

    在Mac上使用idea进行开发的过程中 一般在MavenProject中包含四个文件如下 1 profile 2 WebMavenTest 工程名 3 WebMavenTestSdk 工程名SDK 4 WebMavenTestService
  • 台式计算机显卡最高温度多少,台式机显卡温度多少是正常的(揭晓显卡正常温度度数)...

    PS 本文只讨论台式机 笔记本与台式机相比性能是偏低的 所以只要保证风扇能正常运转的话 基本上不会出现烧坏的情况 温度多少算正常 要知道电脑的硬件温度是不是过高 首先要了解硬件的正常温度范围 1 CPU 在电脑仅仅保持开机的情况下 一般是3
  • VLC打不开视频文件调试技巧

    用VLC打开TS文件 如果只有视频流的话可以打开 添加进了SRT字幕 打开失败 暴风 QQ影音 KMPlayer都可以正常打开 查询原因 下面是一个VLC自带的查询功能 或按快捷键Ctrl M 打开后的界面如下 注意下面的冗长等级是关键 它
  • 第1章 创建一个html网页

    创建一个html网页 目录标题 1 1认识html 1 2html标签 1 3html文件的基本结构 1 4Chrome的开发者工具 1 5在记事本中编写HTML文件 1 6使用编辑器创建HTML文档 1 6 1下载Hbuilder X 1
  • 位运算符详细解析

    位运算符计算 先把十进制转为二进制 计算完在转回十进制 以下位转换和计算规则 进制和 进制的转换 进制转 进制 标数除以2 若能除尽 该位记做0 若除不尽 该位记做1 再对商继续除以2 以 此类推 直到商为0 然后把每 位的结果反序组合就是
  • ROS语音更改API

    1 准备工作 申请科大讯飞帐号 下载SDK 打开 讯飞官网 创建语音合成需求 下载sdk 其中有libs库 并记录相应的appid 用于后续文件使用 下载的sdk中内容如下 我们将用到libs库中的文件 还需要更改 asr tts 两个文件
  • 【Linux 驱动篇(三)】新字符设备驱动

    文章目录 一 新字符设备驱动原理 1 分配和释放设备号 2 新的字符设备注册方法 2 1 字符设备结构 2 2 cdev init 函数 2 3 cdev add 函数 2 4 cdev del 函数 二 自动创建设备节点 1 mdev 机
  • 从0开始学习JavaScript--初识JavaScript

    一 JavaScript简介 1 JavaScript的起源 avaScript最初由Netscape的Brendan Eich设计 最初将其脚本语言命名为LiveScript 后来Netscape在与Sun合作之后将其改名为JavaScr
  • chatgpt网页版替代方法

    从昨天网上开始一直开着的chatgpt网页突然打不开了 提示1020错误 尝试换了不同代理软件或者代理地点仍然无法解决 也搜了很多资料 比如删除cookie 重启浏览器 更换浏览器等均不起作用 至今仍无法解决 具体错误内容如下 Access
  • 输入yum命令报错:Loaded plugins: fastestmirror You need to be root to perform this command.

    解决方法 是提示要获取root权限 输入su 回车输入密码即可
  • 计算机网络-子网划分(子网地址、广播地址、子网掩码)

    子网划分 题目 办公室内有一台计算机 IP地址为192 45 165 243 子网掩码为255 255 255 224 则该机所在的网络属于哪类网络 其网络是否进行了子网划分 若划分 则分为几个网络 并写出每个子网号 改机的子网号和广播地址
  • LFU算法族:window-LFU

    LFU算法族相关文章目录汇总 LFU算法 LFU Aging算法 window LFU算法 本文 1 LFU算法的不足 LFU Least Frequently Used 是一种缓存淘汰算法 LFU算法是根据缓存的访问频率 去淘汰访问次数最