美文网首页
《全栈工程师修炼指南》学习笔记 16

《全栈工程师修炼指南》学习笔记 16

作者: VioletJack | 来源:发表于2023-02-18 21:59 被阅读0次

    持久层 - 缓存

    缓存的本质

    缓存,就是为了节约对原始资源重复获取的开销,而将结果数据副本存放起来以供获取的方式。
    缓存生效的本质是空间换时间。
    只有当一个操作是幂等的、安全的,这样的操作才可以考虑被缓存。
    当一个数据是幂等的,安全的,但不会被重复获取,那么这类数据不需要使用缓存。
    缓存可以是为了提高获取资源的速度,也可以是为资源的获取分担压力。

    缓存的几个特点

    缓存往往针对的是资源
    缓存数据必须是重复获取的。
    缓存是为了解决开销问题。
    缓存的存取不一定是更快的。
    缓存的各种读写模式是可以组合使用的。
    选择哪种缓存模式算是一种 trade-off,根据实际情况来决定。

    缓存的两个动机

    追求更低的延迟。
    追求更高的吞吐量

    缓存需要注意的点

    同时发送多个请求,如何保证一致性?
    如果数据更新异常,会不会出现缓存问题?

    缓存无处不在

    DNS 缓存
    反向代理缓存
    后端 MVC 各级缓存
    网络请求缓存 Cache-control
    CDN
    ……

    缓存应用模式

    Cache-Aside

    应用查询缓存是否有数据结果。(判断选择行为)
    如果有,从缓存返回数据结果。
    如果没有,执行原始逻辑,返回数据结果、
    将数据结果写入缓存。

    Read-Through

    应用向缓存要求数据。(直接问缓存要)
    如果缓存中有数据,返回给应用。
    如果缓存中没有数据,缓存查询数据库,并将结果写入自己。
    缓存将数据返回给应用。

    Write-Through

    这种模式一般用于处理数据更新的场景。
    缓存系统需要自己内部保证并发场景下,缓存更新的顺序要和数据库更新的顺序一致。
    步骤

    • 应用要求缓存更新数据
    • 如果缓存中有数据,先更新该数据。
    • 缓存再更新数据库中的数据。
    • 缓存告知应用更新完成。

    Write-Around

    类似 Write Through 模式,但是它只更新数据库,而缓存只提供读的操作。

    Write-Back

    高吞吐量、高运行速度,但容易出现一致性和数据丢失的问题。
    应用要求缓存更新数据
    缓存就数据写入自己
    缓存告知应用更新完成
    缓存异步更新数据库

    缓存数据更新策略

    先更新数据库
    再令缓存失效

    相关文章

      网友评论

          本文标题:《全栈工程师修炼指南》学习笔记 16

          本文链接:https://www.haomeiwen.com/subject/avgbkdtx.html