MST

星途 面试题库

面试题:缓存设计:混合使用本地缓存与分布式缓存的架构优化

假设你正在设计一个高并发、大规模的后端系统,需要同时使用本地缓存和分布式缓存。请描述整体的缓存架构设计思路,包括数据在两种缓存间的分配策略、更新策略以及如何避免缓存穿透、缓存雪崩等问题。
32.7万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存架构设计思路

  1. 本地缓存:通常选择如 Guava Cache 这类轻量级、快速的本地缓存。主要用于存储高频访问且相对稳定的数据,减少对分布式缓存和后端数据源的压力。
  2. 分布式缓存:选用如 Redis 这样性能卓越、功能丰富的分布式缓存。用于存储大规模的数据,并且在多服务器间共享,以支持高并发访问。

数据在两种缓存间的分配策略

  1. 冷热数据区分:对于访问频率极高且变化频率低的热数据,优先放入本地缓存。而对于大量访问频率相对较低或变化较频繁的数据,存储在分布式缓存中。
  2. 根据业务场景:例如,一些配置信息、基础字典数据等可以放在本地缓存;而用户相关的动态数据、订单数据等放在分布式缓存。

更新策略

  1. 本地缓存
    • 主动更新:当数据发生变化时,主动通知相关服务器更新本地缓存。
    • 定期刷新:设置一定的时间间隔,定期从分布式缓存或数据源重新加载数据到本地缓存。
  2. 分布式缓存
    • 写后更新:在数据更新到持久化存储后,立即更新分布式缓存。
    • 异步更新:使用消息队列等机制,在数据更新后异步地更新分布式缓存,以减少对业务操作的影响。

避免缓存穿透问题

  1. 布隆过滤器:在查询数据前,先通过布隆过滤器判断数据是否存在。如果布隆过滤器判断不存在,则直接返回,不再查询缓存和数据库,避免无效查询穿透到数据库。
  2. 空值缓存:当查询数据库发现数据不存在时,将空值也缓存起来,并设置较短的过期时间,防止后续相同的无效查询穿透。

避免缓存雪崩问题

  1. 设置不同过期时间:对分布式缓存中的数据设置不同的过期时间,避免大量数据在同一时间过期,导致所有请求直接落到数据库。
  2. 使用二级缓存:除了分布式缓存,再添加一层如 CDN 这样的二级缓存,分担分布式缓存失效时的压力。
  3. 限流与降级:对访问量进行限流,防止瞬间大量请求涌入。当缓存失效导致压力过大时,进行服务降级,返回兜底数据或提示信息。