美文网首页AVPlayer
缓存之相关概念和应用模式

缓存之相关概念和应用模式

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-09-02 08:23 被阅读0次

    DNS 原理:http://www.ruanyifeng.com/blog/2016/06/dns.html
    HTTP缓存:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching

    1.缓存

    缓存:为了节约对原始资源重复获取的开销,而将结果数据副本存放起来以供获取的方式。

    2.缓存的本质

    缓存针对的是资源、缓存数据必须是重复获取的、为了解决开销的问题【延迟和吞吐量】、缓存的存取其实不一定是更快的。

    3.缓存是怎么应用的

    1.对于地址栏中输入的域名,浏览器需要搞清楚它代表的IP地址,才能访问。具体过程如下:

    • 它会先查询浏览器内部的“域名-ip”缓存,如果你曾经使用浏览器访问过这个域名,可能会留有映射缓存。
    • 如果没有,会查询操作系统是否存在这个缓存,例如在Mac中,我们可以通过修改/etc/hosts文件来自定义这个域名到IP的映射缓存。
    • 如果还没有,就会查询域名服务器(DNS,Domain Name System),得到对应的IP和可缓存时间。

    2.当请求抵达服务端,在反向代理中也是可以进行缓存配置的,比如服务端包含SSI的方式来加载母页面上的一些静态内容。
    反向代理:服务端的代理。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得到反向代理的IP地址,而不知道在代理服务器后面的服务器集群的存在。比如CDN、NGINX、IIS等。
    前向代理:客户端的代理 ,将从互联网上获取的资源返回给一个或多个的客户端,服务端(如web服务器)只知道代理的IP地址而不知道客户端的IP地址。


    image.png

    3.请求终于抵达服务端的代码逻辑,MVC各层都是可以应用缓存模式的。

    • controller层,拦截过滤器,配置缓存对服务进行过滤。直接通过过滤器返回缓存结果,而不执行后面的逻辑。
    • Model层,数据库ORM框架提供了缓存能力。比如对于贫血模式,DAO上方的service层基于其暴露的API应用缓存。
    • View层,很多页面模板都支持缓存标签,页面中的部分内容,不需要每次都执行渲染操作,而可以直接从缓存中获取渲染后的数据并返回。

    比如:Cache-Control: public, max-age=84600 即表示可以被任意节点缓存最多84600s。

    4.缓存应用模式

    1、Cache-Aside
    最常见的一种缓存应用模式。
    数据获取策略:

    • 应用先去查看缓存是否有所需数据
    • 如果有,应用直接将缓存数据返回给请求发
    • 如果没有,应用执行原始逻辑,例如查询数据库得到结果数据
    • 应用将结果数据写入缓存


      image.png

    数据更新策略:

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

    2、Read-Through
    缓存系统彻底变成了它身后数据库的代理,应用的请求访问只能看到缓存的返回数据,而数据库系统对他是透明的。比如ORM框架,通过Read-Through和Write-Through实现。
    数据获取策略:

    • 应用向缓存要求数据
    • 如果缓存中有数据,返回给应用,应用在将数据返回
    • 如果没有,缓存查询数据库,并将结果写入自己
    • 缓存将数据返回给应用


      image.png

    3、Write-Through
    和Read-Through类似,图示同上,但Write-Through是用来处理数据更新的场景。缓存系统需要自己内部保证并发场景下,缓存更新的顺序要和数据库更新的顺序一致。
    数据更新策略:

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

    4、Write-Back
    对于Write-Back模式来说,更新操作发生的时候,数据写入缓存之后就立即返回了,而数据库的更新异步完成。

    相关文章

      网友评论

        本文标题:缓存之相关概念和应用模式

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