MST

星途 面试题库

面试题:分布式系统下分布式缓存与本地缓存的失效策略与应用场景结合

在分布式系统环境中,分布式缓存和本地缓存各自有哪些常见的失效策略?如何根据不同的应用场景(如读多写少、读写均衡、写多读少)来选择和配置合适的失效策略?
27.7万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

分布式缓存常见失效策略

  1. 超时失效:为缓存数据设置一个固定的过期时间,到达时间后数据自动失效。比如在Memcached中,可通过设置expiry参数来指定过期时间。优点是实现简单,能保证数据的时效性;缺点是可能在过期瞬间产生大量缓存穿透。
  2. 主动失效:应用程序根据业务逻辑,主动删除缓存中的数据。例如,在数据库数据更新时,同步删除相关的缓存数据。优点是能精准控制缓存数据的有效性;缺点是增加了应用开发的复杂度,若操作不当易出现数据不一致。
  3. 惰性失效:当访问缓存数据时,发现数据已过期,才将其从缓存中删除,并重新从数据源获取最新数据存入缓存。这种策略减少了主动失效带来的开销,但在数据过期到被访问期间,可能会返回旧数据。

本地缓存常见失效策略

  1. 基于容量的失效:当缓存达到设定的最大容量时,根据一定的淘汰算法(如LRU - 最近最少使用、LFU - 最不经常使用、FIFO - 先进先出)淘汰部分数据。例如Guava Cache可通过设置maximumSize来限制缓存容量,并选择相应的淘汰算法。LRU根据数据最近被访问的时间来淘汰,LFU根据数据被访问的频率淘汰,FIFO按照数据进入缓存的先后顺序淘汰。优点是能在有限的资源下保持缓存的高效性;缺点是不同算法在不同场景下效果不同,需合理选择。
  2. 超时失效:同分布式缓存的超时失效,为缓存数据设置过期时间。

根据不同应用场景选择和配置失效策略

  1. 读多写少场景
    • 分布式缓存:优先选择超时失效策略,并适当延长过期时间。这样可以减少缓存更新的频率,提高缓存命中率,降低对数据源的压力。同时,结合主动失效策略,在数据发生变更时及时更新缓存,确保数据一致性。例如,新闻资讯类应用,文章内容更新频率低,可设置较长的超时时间,在文章更新时主动删除相关缓存。
    • 本地缓存:采用基于容量的失效策略,如LRU算法,能有效利用缓存空间,优先保留热点数据。配合适当的超时失效策略,进一步保证数据的时效性。比如在电商商品详情页的缓存中,商品信息更新不频繁,使用LRU算法和较长的超时时间能提高缓存性能。
  2. 读写均衡场景
    • 分布式缓存:超时失效和主动失效相结合,且适当缩短超时时间。在数据写入时主动更新缓存,同时较短的超时时间可确保缓存数据的及时更新。例如,社交平台的用户信息缓存,用户信息有一定的读写频率,通过这种方式既能保证数据一致性,又能维持缓存的命中率。
    • 本地缓存:同样采用超时失效和基于容量的失效策略结合。根据业务情况调整容量和超时时间,使缓存既能容纳足够的热点数据,又能及时更新。如在线教育平台的课程信息缓存,根据课程的使用频率和更新情况,合理配置缓存容量和过期时间。
  3. 写多读少场景
    • 分布式缓存:以主动失效策略为主,在数据写入后及时更新缓存。尽量减少超时失效策略的依赖,因为写操作频繁,超时时间难以合理设置。例如,在实时交易系统中,订单数据变化频繁,主动失效能保证缓存数据的准确性。
    • 本地缓存:由于写操作频繁,本地缓存的作用相对较小。可适当采用短时间的超时失效策略,减少缓存数据的不一致时间。例如,金融交易系统的账户余额缓存,设置较短的超时时间,确保数据的实时性。