MST

星途 面试题库

面试题:缓存设计之中等难度:设计简单缓存策略

假设你正在开发一个电商系统,商品信息从数据库获取。请设计一个简单的缓存策略来减少对数据库的访问,阐述缓存的更新机制以及如何处理缓存穿透问题。
19.7万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存策略

  1. 缓存数据结构:可使用 Redis 等内存数据库作为缓存。对于商品信息,以商品 ID 作为 key,商品详细信息作为 value 进行存储。这样在获取商品信息时,能通过快速的 key - value 查找来获取缓存数据。
  2. 缓存粒度:根据业务场景,可按商品维度缓存。即每个商品对应一条缓存记录,这样能精准控制单个商品的缓存,避免因其他商品变化导致不必要的缓存更新。
  3. 缓存有效期:设置合理的缓存过期时间。例如热门商品可设置较长的过期时间,如数小时;而一些更新频率较高的商品则设置较短的过期时间,如几分钟。同时,可采用缓存预热的方式,在系统启动时将热门商品提前加载到缓存中。

缓存更新机制

  1. 写后更新:当商品信息在数据库更新后,立即更新缓存中的对应数据。在电商系统中,商品库存、价格等信息更新时,先执行数据库的更新操作,成功后再更新缓存。这样能保证缓存和数据库数据的一致性。
  2. 删除缓存:在某些场景下,例如商品上下架操作,将缓存中的对应商品信息删除。当下次请求该商品时,缓存未命中,从数据库获取最新数据并重新缓存。这种方式简单直接,但可能导致短时间内缓存与数据库数据不一致。

缓存穿透处理

  1. 布隆过滤器:在系统初始化时,将数据库中所有商品 ID 构建成一个布隆过滤器。当有查询请求时,先通过布隆过滤器判断该商品 ID 是否存在。如果布隆过滤器判断不存在,则直接返回,不再查询数据库。布隆过滤器有一定的误判率,但可以通过调整参数(如哈希函数个数、位数组大小)来控制误判率。
  2. 空值缓存:当查询数据库发现商品不存在时,将该查询结果(空值)也缓存起来,并设置一个较短的过期时间。这样下次相同的查询就直接从缓存中获取空值,避免重复查询数据库。