MST
星途 面试题库

面试题:缓存设计之Redis在分布式系统中的基本缓存策略

在分布式系统中使用Redis做缓存,常见的缓存更新策略有哪些,各自的优缺点是什么,以及在实际场景中如何选择合适的策略?
36.9万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

常见缓存更新策略及优缺点

  1. Cache-Aside(旁路缓存)策略
    • 优点
      • 实现简单,应用程序逻辑相对清晰,只需在读取和写入数据时额外操作缓存。
      • 数据一致性较好,先更新数据库,再删除缓存,能保证最终一致性。
    • 缺点
      • 并发场景下可能出现缓存和数据库数据不一致问题。例如,高并发时,A线程先读取数据到缓存,B线程更新数据库后删除缓存,A线程又写入旧数据到缓存。
      • 写操作性能相对低,因为每次写操作都涉及数据库和缓存两次操作。
  2. Read-Through(读穿)策略
    • 优点
      • 应用程序只需关注从缓存读取数据,无需关心缓存是否存在,缓存加载由缓存服务内部处理,简化应用逻辑。
      • 能提高缓存命中率,因为缓存缺失时会自动加载数据到缓存。
    • 缺点
      • 增加了缓存服务的复杂度,需要缓存服务具备从数据源加载数据的能力。
      • 首次读取数据时,如果缓存未命中,会有额外的数据源读取延迟。
  3. Write-Through(写穿)策略
    • 优点
      • 数据一致性非常高,每次写操作都同时更新数据库和缓存,保证两者数据实时一致。
      • 应用程序无需额外处理缓存更新逻辑,由缓存服务负责。
    • 缺点
      • 写操作性能较差,因为每次写都要等待数据库和缓存更新完成,可能成为系统性能瓶颈。
      • 对缓存服务依赖度高,如果缓存服务故障,会影响写操作。
  4. Write-Behind(写后更新/异步缓存写入)策略
    • 优点
      • 写操作性能极高,数据写入先在缓存,然后异步批量更新到数据库,能显著提高系统吞吐量。
      • 适用于对数据一致性要求不是特别高的场景,能有效减少数据库I/O压力。
    • 缺点
      • 数据一致性较差,缓存和数据库可能长时间存在不一致情况,特别是在系统故障时可能丢失数据。
      • 实现复杂,需要处理异步任务、重试机制等,增加开发和运维成本。

实际场景中策略选择

  1. 对数据一致性要求极高
    • 如金融交易场景,适合Write-Through策略,确保数据库和缓存数据实时一致,但要考虑性能优化,如使用高性能数据库和缓存集群。
  2. 读多写少且对一致性要求较高
    • 电商商品详情页展示场景,Cache-Aside策略较为合适,通过合理的缓存过期时间和并发控制,能在保证一致性的同时兼顾性能。
  3. 读多写少且希望简化应用逻辑
    • 内容管理系统的文章展示场景,Read-Through策略可简化应用程序对缓存的操作,提高缓存命中率。
  4. 写多读少且对一致性要求不高
    • 日志记录场景,Write-Behind策略能大幅提升写性能,通过异步批量写入数据库,减轻数据库压力,但要注意数据丢失风险。