MST

星途 面试题库

面试题:缓存设计之中等难度:缓存命中率提升方法

在后端开发的缓存设计中,为了提升缓存命中率,常用的缓存淘汰算法有哪些?请简要描述它们的工作原理,并说明在实际应用场景中如何选择合适的算法来提升缓存命中率。
12.3万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

常用缓存淘汰算法及原理

  1. 先进先出(FIFO)算法
    • 原理:按照数据进入缓存的先后顺序进行淘汰。当缓存满时,将最早进入缓存的数据淘汰出去。它就像一个队列,新数据从队尾进入,淘汰时从队头移除数据。
  2. 最近最少使用(LRU,Least Recently Used)算法
    • 原理:当缓存满时,淘汰最长时间没有被使用的数据。它会记录每个数据项的访问时间,每次访问数据时更新其访问时间,当需要淘汰数据时,选择访问时间最早(即最近最少使用)的数据项淘汰。
  3. 最不经常使用(LFU,Least Frequently Used)算法
    • 原理:为每个数据项维护一个访问频率计数器,当缓存满时,淘汰访问频率最低的数据项。每次访问数据时,该数据项的访问频率计数器加1。在需要淘汰数据时,优先淘汰访问频率最小的数据。
  4. 时间戳 LRU(TTL - LRU,Time - To - Live Least Recently Used)算法
    • 原理:在LRU基础上,为每个缓存数据设置一个过期时间(TTL)。当数据过期时,直接淘汰。如果缓存满且没有过期数据,则按照LRU规则淘汰数据。

实际应用场景中算法选择

  1. FIFO算法适用场景
    • 场景:适用于数据访问具有时间局部性不强,但对顺序有一定要求的场景。例如,日志缓存,只需要保留最近一段时间内的日志记录,先进来的日志可以按顺序淘汰,因为最新的日志可能更重要,而不需要考虑日志的访问频率或最近是否被访问。
  2. LRU算法适用场景
    • 场景:广泛应用于各种通用场景,尤其是在数据访问具有时间局部性的情况下。比如Web页面缓存,用户最近访问过的页面很可能再次访问,所以LRU能较好地满足这种需求,通过淘汰长时间未访问的页面来为新页面腾出空间。
  3. LFU算法适用场景
    • 场景:适用于数据访问频率相对稳定的场景。例如,在一个音乐播放平台的缓存中,如果用户对不同歌曲的喜好相对稳定,经常播放的歌曲应该保留在缓存中,LFU算法可以通过记录歌曲的播放频率(访问频率),淘汰播放次数少(访问频率低)的歌曲缓存。
  4. TTL - LRU算法适用场景
    • 场景:适用于数据有明确过期时间要求的场景。例如,一些基于时间的授权令牌缓存,令牌有固定的有效期,使用TTL - LRU算法,既可以在令牌过期时及时淘汰,又可以在缓存满且无过期令牌时,按照LRU规则淘汰数据,从而有效利用缓存空间。