面试题答案
一键面试缓存更新策略及优缺点
- Cache-Aside(旁路缓存)策略
- 更新方式:应用程序先更新数据库,再删除缓存。
- 优点:
- 实现简单,在大多数场景下比较适用。
- 读操作性能较高,因为读时先查缓存,缓存命中直接返回,只有缓存未命中才查数据库。
- 缺点:
- 存在数据不一致窗口,在更新数据库和删除缓存这两个操作之间,如果有读请求进来,会读到旧数据。
- 高并发下,删除缓存失败可能导致长时间的数据不一致。
- Read-Through(读穿)策略
- 更新方式:应用程序更新数据库,由缓存加载器负责从数据库加载最新数据到缓存。
- 优点:
- 保证缓存中的数据始终是最新的,一致性较好。
- 读操作逻辑相对清晰,缓存加载由专门组件负责。
- 缺点:
- 实现复杂度较高,需要引入缓存加载器等额外组件。
- 缓存加载过程可能带来一定延迟,影响读性能。
- Write-Through(写穿)策略
- 更新方式:应用程序更新数据时,同时更新数据库和缓存。
- 优点:
- 数据一致性强,因为数据库和缓存同时更新。
- 读操作始终能获取到最新数据,缓存命中率高。
- 缺点:
- 写操作性能较低,因为要同时操作数据库和缓存,增加了写操作的耗时。
- 数据库和缓存任何一方更新失败都可能导致数据不一致,维护成本高。
- Write-Behind(写后)策略
- 更新方式:应用程序更新数据时,先更新缓存,然后由缓存异步批量更新数据库。
- 优点:
- 写操作性能高,因为只需操作缓存,异步更新数据库不影响应用程序响应。
- 适合高并发写场景,批量更新数据库能减少数据库压力。
- 缺点:
- 数据一致性较差,存在缓存和数据库数据不一致的时间窗口,尤其是在缓存更新成功但异步更新数据库失败时。
- 实现复杂,需要处理异步任务、重试机制等以确保数据最终一致性。