MST

星途 面试题库

面试题:缓存设计之中等难度:缓存一致性问题的基本解决方案有哪些

请阐述在后端开发缓存设计中,应对缓存一致性问题常见的基本解决方案,并简要说明每种方案的适用场景和优缺点。
29.1万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

1. 读写直写(Write-Through)

  • 方案描述:当数据发生变化时,同时更新缓存和数据库,确保两者数据的一致性。读操作时,先从缓存读取,若缓存未命中,则从数据库读取并更新缓存。
  • 适用场景:适用于对数据一致性要求极高,读操作远多于写操作的场景,如一些实时性要求高的金融数据展示场景。
  • 优点:数据一致性强,实现相对简单。
  • 缺点:写操作性能较低,因为每次写操作都需要同时更新数据库和缓存,可能会成为系统瓶颈。

2. 读写回写(Write-Back)

  • 方案描述:当数据发生变化时,只更新缓存,标记缓存数据为脏数据。缓存定期或在特定条件下(如缓存满)将脏数据写回数据库。读操作同读写直写,先从缓存读取,未命中则从数据库读取并更新缓存。
  • 适用场景:适用于写操作频繁,对数据一致性要求不是特别严格,允许短时间内缓存与数据库数据不一致的场景,例如一些日志记录类的应用。
  • 优点:写操作性能高,因为不需要每次都更新数据库,减少了数据库的 I/O 压力。
  • 缺点:存在数据一致性问题,在缓存数据写回数据库之前,如果系统崩溃,可能会丢失部分数据。

3. 失效(Invalidation)

  • 方案描述:当数据在数据库中发生变化时,立即删除缓存中的对应数据。下次读取该数据时,缓存未命中,从数据库读取并重新填充缓存。
  • 适用场景:适用于读操作远多于写操作,且能容忍短时间缓存数据不一致的场景,如一般的电商商品展示页面。
  • 优点:实现简单,写操作性能相对较高,因为不需要更新缓存,只需要删除操作。
  • 缺点:可能会出现缓存雪崩问题,即大量缓存同时失效,导致大量请求直接打到数据库,可能使数据库压力过大甚至崩溃。并且在缓存失效到重新填充期间,数据存在不一致性。

4. 双写补偿机制

  • 方案描述:在更新数据库后,异步更新缓存,若更新缓存失败,通过重试机制或者消息队列进行补偿,确保缓存最终更新成功。
  • 适用场景:适用于对数据一致性有较高要求,写操作频率适中的场景,如订单状态更新场景。
  • 优点:既保证了一定的写操作性能,又能通过补偿机制尽量保证数据一致性。
  • 缺点:实现较为复杂,需要处理重试逻辑和消息队列相关的问题,增加了系统的复杂度和维护成本。