MST
星途 面试题库

面试题:缓存设计:微服务架构中缓存的常见数据淘汰策略及应用场景

在微服务架构下的缓存系统中,常见的数据淘汰策略有哪些?请分别阐述每种策略适用的场景,并举例说明在实际后端开发中如何选择合适的淘汰策略以提升缓存性能。
23.8万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

常见数据淘汰策略

  1. 先进先出(FIFO)
    • 适用场景:适用于数据具有时效性,且最早进入缓存的数据最不可能再次被访问的场景。例如,新闻资讯类应用的缓存,旧的新闻随着时间推移,被访问的概率逐渐降低。
    • 实际后端开发选择理由:如果业务数据有明显的时间先后顺序,且新数据更有价值,FIFO 可以保证缓存空间为新数据腾出位置。在Java开发中,使用LinkedList实现一个简单的FIFO缓存结构,当缓存满时,移除链表头部元素(最早进入的元素)。
  2. 最近最少使用(LRU)
    • 适用场景:适用于访问模式符合局部性原理的场景,即最近访问过的数据在未来一段时间内再次被访问的概率较高。如电商应用中用户浏览商品的缓存,用户近期浏览的商品更有可能再次查看。
    • 实际后端开发选择理由:LRU 能有效保留热点数据,提升缓存命中率。在Java中可以使用LinkedHashMap,通过重写removeEldestEntry方法实现LRU策略。当缓存达到一定容量时,移除最久未使用的元素。
  3. 最少使用(LFU)
    • 适用场景:适用于数据访问频率相对稳定的场景,即过去访问频率低的数据,未来访问频率也可能较低。比如一些不常用的配置文件缓存,很少被访问的配置文件在后续也不太可能被频繁调用。
    • 实际后端开发选择理由:LFU 根据数据的访问次数来淘汰数据,能更准确地反映数据的使用情况。可以通过自定义数据结构,记录每个数据的访问次数,当缓存满时,淘汰访问次数最少的元素。
  4. 随机淘汰(Random)
    • 适用场景:适用于无法预测数据访问模式,且对缓存命中率要求不是特别高的场景。例如一些简单的测试环境,或者缓存数据相对均匀,没有明显热点的数据场景。
    • 实际后端开发选择理由:实现简单,在某些情况下能避免因特定淘汰策略带来的复杂计算。在代码中可以通过随机数生成器,随机选择一个缓存中的元素进行淘汰。
  5. 超时淘汰
    • 适用场景:适用于数据有明确有效期的场景,如验证码缓存,验证码在一定时间后就失效。
    • 实际后端开发选择理由:通过设置数据的过期时间,能自动清理无效数据,释放缓存空间。在Redis中,可以使用SET key value EX seconds命令设置带过期时间的缓存。