面试题答案
一键面试Cache - Aside(旁路缓存)策略
- 策略描述:
- 读操作:先从缓存读取数据,如果缓存命中,直接返回数据;若缓存未命中,则从数据库读取数据,然后将数据写入缓存,并返回数据。
- 写操作:先更新数据库,然后删除缓存。
- 优点:
- 实现简单:在应用层实现,逻辑相对清晰,对数据库和缓存的耦合度较低。应用程序可以灵活控制何时更新缓存和读取数据,开发和维护成本相对较低。
- 性能较好:读操作时,如果缓存命中,能快速返回数据,提升系统响应速度。对于读多写少的场景,这种策略非常适用,因为缓存命中率较高,能有效减轻数据库压力。
- 缺点:
- 数据一致性问题:写操作时先更新数据库再删除缓存,如果在删除缓存前应用程序重启或者出现异常,可能导致缓存中的数据和数据库不一致。
- 写性能受影响:虽然整体读性能较好,但每次写操作都需要额外删除缓存,增加了写操作的时间开销,尤其是在高并发写场景下,可能会对系统的写性能产生较大影响。
Write - Through(直写式缓存)策略
- 策略描述:
- 写操作:当有数据更新时,同时更新数据库和缓存,确保两者数据一致。
- 读操作:直接从缓存读取数据,如果缓存未命中,则从数据库读取并更新缓存后返回。
- 优点:
- 数据一致性高:由于每次写操作都同时更新数据库和缓存,能很好地保证数据的一致性,适用于对数据一致性要求极高的场景。
- 缓存命中率高:读操作总是优先从缓存获取数据,写操作及时更新缓存,使得缓存中的数据相对较新,提高了缓存命中率。
- 缺点:
- 性能开销大:每次写操作都需要同时操作数据库和缓存,写操作的时间复杂度增加,在高并发写场景下,数据库的压力会显著增大,可能成为系统瓶颈,导致整体性能下降。
- 耦合度高:数据库和缓存的操作紧密耦合,增加了系统维护和扩展的难度,例如更换数据库或者缓存技术时,需要对写操作逻辑进行较大改动。
Write - Behind(回写式缓存)策略
- 策略描述:
- 写操作:数据更新时,只更新缓存,将更新操作异步批量写入数据库。
- 读操作:从缓存读取数据,如果缓存未命中,则从数据库读取并更新缓存后返回。
- 优点:
- 写性能高:写操作只操作缓存,速度快,适合高并发写场景,能有效提升系统的整体写性能。通过批量异步写入数据库,还可以减少数据库I/O次数,提升数据库性能。
- 缓存利用率高:因为写操作优先更新缓存,缓存中的数据能及时反映最新状态,提高了缓存的利用率和命中率。
- 缺点:
- 数据一致性问题:由于写操作异步写入数据库,在缓存更新成功但数据库更新未完成期间,如果发生系统故障,可能导致数据丢失,影响数据一致性。
- 实现复杂:需要额外的异步任务处理机制来管理缓存到数据库的异步写入,增加了系统的复杂度和维护成本。同时,需要考虑异步写入任务的失败重试、数据持久化等问题。