zoukankan      html  css  js  c++  java
  • *缓存

    一、Buffer和Cache
    网上找不到标准答案;

    不同点:
        Buffer:一般用于写操作,写缓冲;因为硬盘对于CPU而言是非常慢的,CPU将数据写入磁盘缓冲区之后,就认为写完了,之后由别的进程将数据写入硬盘;
        Cache:一般用于读操作,读缓存;--->提高数据的读取效率;
    
        CPU, CPU L1 L2 L3
    
    相同点:
        都是设计到IO操作的,都是解决速度不一致的问题;    
    

    DMA:直接内存访问;以前比如WIM98的时候,如果直接拷贝的话,其他的事情都没有办法干了;
    DMA是的输入输出是并行操作;
    NUMA:非统一内存访问;
    为什么服务器的内存不能乱插?一块内存对应一个CPU,在极特殊的情况下,CPU才会访问其他的内存;

    Cache的重点:

        1.存放位置(多级Cache):     
    					客户端(浏览器缓存)
    					内存(本机内存、远程服务器内存)
    					硬盘(本地硬盘(SSD、SAS、SATA、IDE),远程服务器硬盘);
    	
    	2、过期时间
    				TTL
    	3、强制(失效)过期
    	4.Cache的命中率
    

    云备份是不需要缓存的;

    面试不能较真;

    二、浏览器DNS

    比如访问:http://alidns.com

    访问过程: 过去html源代码-->自上而下其中需要的所有元素--->浏览器本地计算和渲染;
    注意:浏览器是边解析,边下载;(异步的,不会影响HTML加载,除非遇到JS,遇到JS会挂起加载的线程,等待JS执行完毕,继续往下执行);

    浏览器的DNS缓存: DNS解析的速度20ms~120ms;

    使用谷歌浏览器查看DNS缓存:chrome://net-internals/#dns

    将所有的域名加载到同一个页面可以提高访问速度,但是产生的问题是,需要请求的域名非常多,解决办法是:

    a、DNS预获取;
    b、url预加载;
    

    三、浏览器缓存

    缓存协商:浏览器和web服务器进行缓存的一个对话;

    浏览器缓存的方法:

      方法1:使用Last_Motified(最后修改时间)

        在linux服务器(web服务器)上通过调用stat,获取网页的最后修改时间,然后将其附带到页面的头部;

        打开crome浏览器-->网络--->全部--->查看响应(头信息)-->Last_Motified(GMT时间);

        查看所有浏览器缓存:about:cache,可以看到有些缓存是保存在硬盘中的,有些事保存在内存中的;

        打开crome调试:请求完毕之后,再次F5刷新,显示304 (not motified),没有修改;

          对比第一次请求,多了IF-Motified-Since:是否在这个时间点修改了,如果没有修改,直接使用本地缓存,给用户呈现;

        这种方法的缺陷:如果只是修改时间变了,但是内容没有变化,依然会产生网络传输;

      方法2:Etag:打标签

        比如使用MD5,每次请求MD5值,如果值没有改变,返回304;

        但是http没有规定MD5如何实现,可以自己实现;

        但是,上述方法只能使得每次请求不传输,但是并不会减少请求次数;

      方法3:过期时间(expires)

        转到或者Enter:所有没有过期的直接使用缓存。所有缓存机制均生效;

        F5或者刷新按钮: 过期时间要不受影响(不过问),其他的缓存协商都受影响;

        ctrl+F5:强制刷新,表示所有的缓存协商的办法失效,从新协商请求;

        http1.1:头部增加参数 max-age=...,表示相对本地时间,优先级最高,为了防止本地时间和服务器时间不一致导致的问题;

    四、CDN

    首先看一个例子:js过期时间 设置为1个小时,js刚上线,但是突然发现有一个bug,导致无法下单,如何解决?

       a、ctrl+F5    #强制刷新
       b、改名
       c、加上参数(加时间戳)  123.js?201601
    

    为什么使用CDN?

    1.不同运营商之间互联的问题;  BGP(贵)
    2.用户到服务器之间网络传输长,节点多,延迟大;
    3.现有服务器带宽有限;
    

      

  • 相关阅读:
    【JAVA】遍历打印目录结构
    Java多线程设计模式(2)
    MBTI职业性格测试你注定是个程序员?
    基于RMI的即时通讯工具的设计与实现
    你在中国有去过那些地区?
    Java多线程设计模式(4)
    学习Unix/Linux编程要学些什么
    在Ubuntu上用Vbox装XP遇到的几个问题
    Java多线程设计模式(3)
    软件架构发展史
  • 原文地址:https://www.cnblogs.com/cqq-20151202/p/6371328.html
Copyright © 2011-2022 走看看