面试题答案
一键面试LRU(Least Recently Used)优缺点
- 优点:
- 符合局部性原理,近期最少使用的数据大概率在未来也较少使用,能较好地预测数据的使用频率,在很多场景下能有效缓存热点数据。
- 实现相对简单,可通过哈希表和双向链表的数据结构高效实现,时间复杂度为O(1)。
- 缺点:
- 对突发访问不适应,如果某一冷数据突然被大量访问,LRU会快速将其加入缓存,可能会淘汰掉其他热点数据,导致缓存命中率下降。
- 没有考虑数据的访问频率,只关注最近访问时间,可能将偶尔访问但访问时间近的数据保留,而淘汰频繁访问但稍久未访问的数据。
MRU(Most Recently Used)优缺点
- 优点:
- 对于写入操作频繁且写入数据大概率马上会被读取的场景,能保证新写入的数据在缓存中,提高读取命中率。
- 实现相对容易,类似LRU的哈希表和双向链表结构,只是链表操作逻辑稍有不同。
- 缺点:
- 对于长时间运行且读取模式较稳定的系统,会不断将新访问的数据移到缓存头部,而忽略了长期热点数据,导致缓存命中率较低。
- 浪费缓存空间,可能一直保留近期访问但实际不需要长期存在缓存中的数据。
基于MRU策略针对高读取性能且少写入操作的优化
- 引入访问频率计数:为每个缓存数据项增加一个访问频率计数器,每次数据被读取时,不仅将其移到MRU位置,还增加其访问频率计数。定期(或在缓存淘汰时)根据访问频率对缓存数据进行调整,对于访问频率高的数据,即使是较久之前访问的,也适当提高其保留在缓存中的优先级。
- 设置多级缓存:结合LRU策略设置多级缓存,比如一级缓存采用MRU策略,用于快速响应最近访问的数据;二级缓存采用LRU策略,存储那些曾经是热点但近期访问少的数据。当一级缓存未命中时,再去二级缓存查找。这样既利用了MRU对近期访问数据的快速响应,又结合LRU对热点数据的长期缓存能力。
- 缓存预取:根据系统的业务逻辑和历史访问模式,提前预测可能会被访问的数据,并将其加载到缓存中。对于那些写入少但读取性能要求高的系统,提前加载数据到MRU缓存能有效减少缓存未命中次数,提高整体缓存效率。