缓存常见算法

LFU(Least Frequently Used) 最久未用算法

淘汰最后被访问时间最久的元素。
缺点:可能会由于一次冷数据的批量查询而误导大量热点的数据。

LRU(Least Recently Used) 最近最少使用

淘汰最近访问频率最小的元素。
缺点:

1. 最新加入的数据常常会被踢除,因为其起始方法次数少。

2. 如果频率时间度量是1小时,则平均一天每个小时内的访问频率1000的热点数据可能会被2个小时的一段时间内的访问频率是1001的数据剔除掉.

FIFO (First in First out) 先进先出算法

### 常见缓存置换算法介绍 #### LFU (Least Frequently Used) LFU 缓存机制遵循的原则是,如果一个数据项在过去的一段时间内被访问的频率较低,则未来它可能也不会频繁地被访问。因此,在缓存空间不足的情况下,优先移除那些较少使用的项目。具体来说,每当有新的请求到来时,LFU 会记录下各个项目的使用频次;一旦需要腾出位置存储新条目而当前缓存已满时,就将拥有最低访问计数的对象驱逐出去[^2]。 ```cpp // C++ 实现简单的LFU结构的一部分 struct Node { int key, value; int freq; // 记录节点被访问过的次数 }; ``` #### LRU (Least Recently Used) LRU 的核心理念在于假设最近一段时间里未被触及的数据在未来短期内也不太可能会再用到。基于此逻辑,当面临溢出状况时,LRU会选择丢弃距离现在最久远未曾读取或者写入的那个元素。这种策略特别适用于处理具有局部性特征的工作负载——即程序倾向于重复引用相同的信息片段[^3]。 ```cpp class LRUCache { private: list<pair<int,int>> cacheList; // 存储键值对以及它们的时间顺序 public: void put(int key, int val){ auto it = find_if(cacheList.begin(),cacheList.end(), [&](const pair<int,int>& p){return p.first==key;}); if(it != cacheList.end()){ cacheList.erase(it); } while(cacheList.size() >= capacity){ cacheList.pop_back(); // 移除最旧的一项 } cacheList.push_front(make_pair(key,val)); } } ``` #### 页面置换算法概述 无论是作为操作系统层面管理物理内存中的虚拟页框分配还是应用层面上优化数据库查询结果集等场景下的高速缓冲区操作,页面置换算法都扮演着至关重要的角色。这类方法旨在通过合理规划有限资源内的内容布局从而提高整体系统的效率与响应速度。值得注意的是,尽管名称不同,但在本质上许多缓存替换技术可以视为广义上的页面调度方案的一种特例形式[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值