13种缓存模式汇总

学习和总结了13种缓存模式的优缺点、应用场景和工作流程。(汇总见底部的思维导图)

缓存模式读取流程更新流程
Cache-Aside(旁路缓存)命中:返回缓存数据;未命中:从数据库加载数据并缓存后返回先更新数据库,然后更新或删除缓存中的数据
Read-Through(透读缓存)同上同上
Write-Through(透写缓存)同上同上
Write-Through with Expiry(带过期的透写缓存)同上同上
Read-Write(读写缓存)同上同上
Write-Back/Write-Behind(写后缓存)同上写入数据到缓存,然后异步写入数据库
Write-Around(写绕过缓存)同上直接更新数据库,可选更新缓存
Lazy Write-Back(懒写后缓存)同上写入数据到缓存,缓存批量异步写数据库
Timed Write-Back(定时写后缓存)同上写入数据到缓存,缓存定时写入数据库
Write-Back with Coalescing(合并写后缓存)同上写入数据到缓存,缓存合并后写入数据库
Cache-Only(仅缓存)命中:返回缓存数据;未命中:从缓存的其他节点尝试获取数据更新缓存
Hybrid Cache(混合缓存)读取流程和更新流程根据组合的具体缓存模式而定读取流程和更新流程根据组合的具体缓存模式而定
Adaptive Caching(自适应缓存)读取流程和更新流程根据访问模式动态调整缓存策略读取流程和更新流程根据访问模式动态调整缓存策略
graph LR A[1. Cache-Aside 旁路缓存] -->|定义| B_def[应用程序直接管理缓存的读取和写入] A -->|优点| C_adv[灵活、减少数据库负载、简单易于实现] A -->|缺点| D_dis[需要手动管理缓存、存在缓存一致性问题] A -->|应用场景| E_sce[读取频繁但更新较少的数据] A -->|读取流程| F_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A -->|更新流程| G_up[更新数据库后更新或删除缓存] A1[2. Read-Through 透读缓存] -->|定义| H_def[缓存层自动管理数据的读取] A1 -->|优点| I_adv[简化应用程序逻辑、减少数据库负担] A1 -->|缺点| J_dis[增加对缓存层依赖、缓存未命中时增加负载] A1 -->|应用场景| K_sce[需要快速访问且能容忍一定程度缓存一致性问题] A1 -->|读取流程| L_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A1 -->|更新流程| M_up[更新数据库后同步更新缓存] A2[3. Write-Through 透写缓存] -->|定义| N_def[数据写入时同时更新缓存和数据库] A2 -->|优点| O_adv[保证缓存和数据库数据一致性] A2 -->|缺点| P_dis[写操作增加负担、可能影响性能] A2 -->|应用场景| Q_sce[数据一致性要求高的场景] A2 -->|读取流程| R_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A2 -->|更新流程| S_up[写入数据到缓存并同步写入数据库] A3[4. Write-Back/Write-Behind 写后缓存] -->|定义| T_def[数据先写入缓存,然后异步写入数据库] A3 -->|优点| U_adv[提高写操作性能、减少数据库写入压力] A3 -->|缺点| V_dis[需要处理数据同步问题、可能导致数据丢失] A3 -->|应用场景| W_sce[不需要即时写入数据库的场景] A3 -->|读取流程| X_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A3 -->|更新流程| Y_up[写入数据到缓存并异步写入数据库] A4[5. Write-Around 写绕过缓存] -->|定义| Z_def[写操作直接写入数据库,而不是写入缓存] A4 -->|优点| AA_adv[减少缓存层负担] A4 -->|缺点| AB_dis[缓存数据可能过时] A4 -->|应用场景| AC_sce[数据收集或审计日志] A4 -->|读取流程| AD_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A4 -->|更新流程| AE_up[直接更新数据库,可选更新缓存] A5[6. Write-Through with Expiry 带过期的透写缓存] -->|定义| AF_def[透写缓存的变种,缓存中的数据会设置过期时间] A5 -->|优点| AG_adv[数据一致性较好] A5 -->|缺点| AH_dis[需要处理数据过期和重新加载] A5 -->|应用场景| AI_sce[配置信息、静态资源] A5 -->|读取流程| AJ_rd[命中且未过期:返回缓存数据
未命中或已过期:从数据库加载并缓存后返回] A5 -->|更新流程| AK_up[写入数据到缓存并同步写入数据库] A6[7. Lazy Write-Back 懒写后缓存] -->|定义| AL_def[写后缓存的变种,不会立即将数据异步写入数据库] A6 -->|优点| AM_adv[减少数据库写入次数] A6 -->|缺点| AN_dis[数据同步延迟] A6 -->|应用场景| AO_sce[批量数据处理] A6 -->|读取流程| AP_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A6 -->|更新流程| AQ_up[写入数据到缓存,缓存批量异步写数据库] A7[8. Timed Write-Back 定时写后缓存] -->|定义| AR_def[缓存中的数据会在特定的时间间隔后被写入数据库] A7 -->|优点| AS_adv[减少即时写入压力] A7 -->|缺点| AT_dis[数据同步延迟] A7 -->|应用场景| AU_sce[定时备份或数据同步] A7 -->|读取流程| AV_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A7 -->|更新流程| AW_up[写入数据到缓存,缓存定时写入数据库] A8[9. Write-Back with Coalescing 合并写后缓存] -->|定义| AX_def[多个写操作可能会被合并为单个写入操作] A8 -->|优点| AY_adv[减少数据库写入次数] A8 -->|缺点| AZ_dis[需要复杂的合并逻辑] A8 -->|应用场景| BA_sce[频繁更新的配置信息] A8 -->|读取流程| BB_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A8 -->|更新流程| BC_up[写入数据到缓存,缓存合并后写入数据库] A9[10. Read-Write 读写缓存] -->|定义| BD_def[缓存既处理读操作也处理写操作] A9 -->|优点| BE_adv[读写操作都从缓存中进行] A9 -->|缺点| BF_dis[缓存失效时影响性能] A9 -->|应用场景| BG_sce[实时数据监控] A9 -->|读取流程| BH_rd[命中:返回缓存数据
未命中:从数据库加载并缓存后返回] A9 -->|更新流程| BI_up[更新缓存后同步更新数据库] A10[11. Cache-Only 仅缓存] -->|定义| BK_def[所有的数据访问都通过缓存进行] A10 -->|优点| BL_adv[快速的数据访问] A10 -->|缺点| BM_dis[数据一致性难以保证] A10 -->|应用场景| BN_sce[静态内容分发] A10 -->|读取流程| BO_rd[命中:返回缓存数据
未命中:从缓存的其他节点尝试获取数据] A10 -->|更新流程| BP_up[更新缓存] A11[12. Hybrid Cache 混合缓存] -->|定义| BQ_def[结合多种缓存模式] A11 -->|优点| BR_adv[适应不同的数据访问模式和业务需求] A11 -->|缺点| BS_dis[实现复杂] A11 -->|应用场景| BT_sce[电商网站] A11 -->|读取流程| BU_rd[根据组合的具体缓存模式而定] A11 -->|更新流程| BV_up[根据组合的具体缓存模式而定] A12[13. Adaptive Caching 自适应缓存] -->|定义| BW_def[缓存策略会根据当前的访问模式和系统负载动态调整] A12 -->|优点| BX_adv[优化性能和资源利用率] A12 -->|缺点| BY_dis[实现复杂] A12 -->|应用场景| BZ_sce[动态网站内容] A12 -->|读取流程| CA_rd[根据访问模式动态调整缓存策略] A12 -->|更新流程| CB_up[根据访问模式动态调整缓存策略]