面试题答案
一键面试缓存更新策略及优缺点
- Cache-Aside Pattern(旁路缓存模式)
- 操作方式:
- 读操作:先从缓存读取数据,若缓存命中则直接返回;若缓存未命中,从数据库读取数据,将数据写入缓存,并返回数据。
- 写操作:先更新数据库,然后删除缓存。
- 优点:
- 实现简单,应用程序对缓存和数据库的控制逻辑清晰,大多数场景适用。
- 读操作性能高,因为大部分读请求可以直接从缓存获取数据。
- 缺点:
- 写操作存在数据库和缓存数据不一致风险。在高并发场景下,写数据库和删缓存操作非原子性,可能出现写数据库完成但删缓存失败,导致数据不一致。
- 频繁写操作会导致缓存命中率下降,因为每次写操作后都删除缓存,后续读操作可能需要从数据库重新加载数据到缓存。
- 操作方式:
- Read/Write Through Pattern(读写穿透模式)
- 操作方式:
- 读操作:先从缓存读取数据,若缓存命中则直接返回;若缓存未命中,由缓存服务从数据库读取数据,写入缓存,并返回数据。
- 写操作:先更新缓存,缓存服务再同步更新数据库。
- 优点:
- 应用程序只需与缓存交互,简化了代码逻辑。
- 数据一致性相对较好,因为缓存和数据库的更新操作由缓存服务保证原子性。
- 缺点:
- 缓存服务压力较大,每次读写操作都要与数据库交互,可能成为性能瓶颈。
- 缓存服务实现复杂,需要处理与数据库的同步更新逻辑,对缓存服务可靠性要求高。
- 操作方式:
- Write Behind Caching Pattern(写后缓存模式,也叫异步缓存写入)
- 操作方式:
- 读操作:与其他模式类似,先从缓存读取数据,若命中则返回,否则从数据库读取并写入缓存。
- 写操作:只更新缓存,将数据库更新操作异步化,缓存服务在合适时机批量更新数据库。
- 优点:
- 写操作性能极高,因为直接返回,无需等待数据库更新完成,适合高并发写场景。
- 可以批量更新数据库,减少数据库I/O次数,提高数据库性能。
- 缺点:
- 数据一致性最差,数据库更新存在延迟,在缓存更新后到数据库更新完成这段时间内,数据不一致。
- 实现复杂,需要处理异步任务和缓存与数据库数据一致性的恢复机制,若缓存服务宕机,可能导致数据丢失或不一致。
- 操作方式: