LFU 缓存¶
LFU新增数据放入的是队列尾,而LRU放入的是队列头。
LFU (Least Frequently Used): 最近最不常用算法, 根据数据的历史访问频率来淘汰数据。 - 原则:保留最近使用频率高的数据, 移除最近使用频率低的数据。 - 数据结构:使用双向链表,链表上数据按访问次数排序。 - 处理流程: 1. 当缓存没有命中时,读取新数据放入 缓存队尾。 2. 当缓存命中时,需要将命中的数据往上移动(达到按访问次数排序的目的,如果存在多个访问次数一样的数据 B、C,需要放在这 B 之前)。 3. 当缓存空间不足时,将队尾数据移除。 - 问题: - 刚缓存的数据只使用了一次,那么它很大可能会立即被被淘汰,即使它即将又被使用。而已缓存数据可能很久都没被访问,但历史访问很高,即使后面也不再被访问,短时间内也无法被移除出缓存队列。 - 建议:LFU 缓存缺点很致命,大部分场景不会采用。
1 LRU 和 LFU 使用场景¶
- LRU(Least Recently Used):替换最长时间未被使用的缓存项。适用于缓存项访问模式变化较大的场景。
- LFU(Least Frequently Used):替换访问频率最低的缓存项。适用于缓存项访问频率较为稳定的场景。