面试题答案
一键面试Cache - Aside
- 策略简述:应用程序先更新数据库,再删除缓存。读操作时先查缓存,缓存没有则查数据库并将结果放入缓存。
- 优点:实现简单,应用程序对缓存和数据库的控制清晰,能保证数据一致性,一般数据同步延迟下能较好工作。
- 缺点:在高并发场景下,更新数据库和删除缓存操作非原子,可能出现短暂数据不一致。若删除缓存失败,后续读操作可能读到旧数据。
Read - Through
- 策略简述:应用程序只与缓存交互,缓存负责从数据库加载数据。读操作时,缓存缺失则缓存从数据库读取并写入自身。写操作时,先更新数据库,再让缓存失效(或更新缓存)。
- 优点:应用程序代码简化,缓存负责数据加载逻辑。读操作有较好的性能,缓存可对读请求做优化。在一定程度能隐藏数据库延迟,对数据同步延迟容忍度相对较高。
- 缺点:缓存系统复杂度增加,需要处理与数据库交互。写操作时若先更新数据库成功,更新缓存失败,会导致数据不一致,增加处理难度。
Write - Through
- 策略简述:应用程序写操作时,同时更新缓存和数据库,读操作直接从缓存读取。缓存负责保证数据库与自身数据一致,写操作先写入缓存,缓存再同步写入数据库。
- 优点:数据一致性好,读操作性能高,能即时响应读请求。由于缓存直接更新数据库,可减少数据同步延迟带来的不一致问题。
- 缺点:写操作性能受数据库性能限制,每次写都要操作数据库,若数据库性能瓶颈,整体写性能下降。缓存与数据库耦合度高,增加缓存维护成本。
Write - Behind Caching
- 策略简述:应用程序写操作时,只写入缓存,缓存异步批量更新数据库。读操作先查缓存,缓存没有再查数据库并更新缓存。
- 优点:写操作性能极高,适用于高并发写场景,可显著减少数据库压力。缓存批量操作数据库,提高数据库写入效率。
- 缺点:数据一致性最差,由于异步更新,数据从缓存到数据库存在延迟,在延迟期间可能读到旧数据。缓存故障可能导致数据丢失,需要复杂的缓存持久化和恢复机制。