• PHP缓存技术


    为什么要用缓存?

        缓存技术是提升系统性能最有效的办法。从操作系统的临时交换区,到CPU的一二级缓存,再到硬盘显卡,缓存技术几乎无处不在。具体到web应用上,从你在浏览器地址栏里键入地址并敲下回车开始,到页面呈现在你面前,这一次网络请求,沿途各处都用到了缓存技术。DNS,路由器,负载均衡设备,代理缓存,web服务器,浏览器等都以各种不同的形式在利用缓存技术。

    缓存的作用

        缓存作为一种存储介质,保存上一次耗时计算的结果,当下一次相同的请求到来时,直接返回保存的结果,不用再劳驾后端服务器做一次重复劳动。这样一来,后端服务器的压力减轻了,自然能提供更多的服务,这是典型的用空间换时间的做法。

    缓存的特性

        有效期是缓存的必要属性,当过了有效期后,缓存失效,重新计算结果并缓存,进入下一个时效周期。

        缓存内容有变化时,需主动删除缓存。

    PHP缓存技术

        从大的方向来说,PHP缓存可分为编译类缓存、数据类缓存、基于反向代理的web缓存和页面静态化

    • 编译类缓存

            常用到的编译缓存工具有Apc,Accelerator,Xcache等,其原理是将脚本编译生成的opcode予以保存,如果脚本文件没有修改,下次不用重新编译(当然具体行为与配置有关)。

            对于Apc来说,在php.ini中,将apc.ttl设置为0,则表示缓存条目永不超时,这意味着缓冲区满后,将无法缓存新条目,官方建议值为7200~86400。apc.stat选项表示是否启用脚本更新检查。默认值1表示apc每次请求脚本文件时都会检查脚本是否被更新,如果更新则重新编译并缓存,这样做对性能有影响。如果设置为0,表示不检查脚本是否更新,这样能大幅提高性能,但是假如脚本文件更新了,则需要重启web服务器或者fcgi进程,默认值为1。

            Apc的这种用法称之为‘系统缓存’,还有一种用法称为‘用户数据缓存’,使用方式类似memcached,在此不再展开。

    • 数据类缓存

            此类缓存,主要指对变量、数据库查询结果等的缓存。实现方式可以有多种,比如以资源id为键,或者以查询语句为键来存储,承载缓存数据的载体则通常是memcached,redis和文件等。

    • 基于反向代理的web缓存

            如Nginx的proxy_cache和fastcgi_cache,Apache2的mod_proxy和mod_cache,以及Squid和Varnish。严格来说,这并不属于PHP缓存,但是鉴于和PHP结合比较紧密,权且归到一处来。

            以Nginx举例,其有两种缓存机制,proxy_cache和fastcgi_cache,两者的区别:

            proxy_cache作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态的。
            fastcgi_cache作用是缓存fastcgi生成的内容,很多情况是php生成的动态内容。

            proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端带宽。
            fastcgi_cache缓存减少了nginx与php的通信次数,更减轻了php和数据库的压力。

    • 页面静态化

            也可称之为页面缓存,可分为全页面缓存和页面静态片段缓存。主要用到的技术为输出控制。

            

    ob_start();
    ******要运行的代码*******
    $content = ob_get_contents();
    ****将缓存内容写入html文件*****
    file_put_contents('abc.html',$content);
    ob_end_clean();

            这样用户直接访问abc.html即可。页面静态片段缓存与此类似,可以用ob实现,也可以用ESI实现。还有一种情况,页面的大部分内容是静态的,但是有一小部分内容是动态的,这怎么办呢。这种情况我们把它归属于动态缓存技术,我们下次再讲。

    我们仍未知道那天所看见的花的名字
  • 相关阅读:
    WeUI——switch开关转换
    WeUI——单选框
    WeUI——CheckBox表单复选框
    WeUI——表单输入框状态
    WeUI——表单验证码
    详细介绍 C# 中的方法和参数
    C# 中类的基本概念
    C# 中的类型和变量
    学习 C# 从 Hello World 开始吧
    C# 和 .NET Core 的关系
  • 原文地址:https://www.cnblogs.com/menma/p/4205050.html
Copyright © 2020-2023  润新知