iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >使用php数据缓存技术提高执行效率
  • 317
分享到

使用php数据缓存技术提高执行效率

php数据缓存技术php提高执行效率 2022-12-14 06:12:48 317人浏览 八月长安
摘要

目录PHP 缓存介绍什么是缓存缓存作用常用缓存类型php 常用内存缓存介绍php opcode缓存 php文件缓存为什么要使用php缓存技术?理由很简单:提高效率。在程序开

为什么要使用php缓存技术?理由很简单:提高效率。在程序开发中,获取信息的方式主要是查询数据库,除此以外,也可能是通过WEB Services或者别的某种方法,无论哪种方法,在大量的并发访问面前,它们都可能成为效率的瓶颈,为了解决这些问题,人们提出了很多解决方案,其中一些是利用优化软件(如:APC,Eaccelerator,Zend Optimizer等等)来提高程序的运行效率,合理的运用这些软件,往往能使程序的运行效率得到数量级上的提升,但前提是你必须拥主机的控制权,以便能够安装这些软件,如果你使用的是虚拟主机的话,那么只能祈祷你的服务提供商已经预装了某个优化软件,否则就必须自己使用PHP来实现相应的缓存功能。

PHP缓存技术是一种解释型语言,属于边编译边运行,包括PHP编译缓存和PHP数据缓存两种。PHP缓存,这种运行模式的优点是程序修改很方便,但是运行效率却很低下。PHP编译缓存针对这种情况做改进处理,使得PHP语言只要运行一次,就可以把程序的编译结果缓存起来。这样,接下来的每次运行都不需要再次编译了,这大大提高PHP运行速度。

PHP 缓存介绍

什么是缓存

    数据交换的缓冲区(称作Cache)
    临时文件交换区

缓存作用

    减少网络延迟,加快页面打开速度
    减少数据查询次数,降低数据库压力
    降低系统负荷,极大的提升系统性能

常用缓存类型

    文件缓存:使用 PHP 文件操作函数,把数据缓存到服务器磁盘文件中
    内存缓存:Redis、Memcached、mongoDB
    Opcode缓存:PHP 是一种解释型脚本语言,在 PHP 执行过程中,虚拟机会把 PHP 代码翻译成中间语言,这种中间语言就叫 Opcode,然后虚拟机再把 Opcode 顺序执行。把 PHP 代码对应的 Opcode缓存到内存中,加速 PHP 执行,减少了代码翻译成中间语言这一步操作。

文件缓存内存缓存Opcode缓存
存储介质磁盘文件内存内存
不足io操作慢、文件的存在占内存、不持久部署代码刷新慢
应用举例新闻数据、城市区域会员、商品、SessionOpcodeCache(代码加速)

PHP 常用内存缓存介绍

    PHP是一种脚本语言,脚本执行结束之后,所有的变量全部释放掉,本身没有能力将数据常驻内存。
    PHP借助于内存服务器将缓存数据储存在服务器内存。
    优点:读写速度快、跨服务器存储(例如在做多服务器集群的时候,可以将 Session 存储于内存缓存服务器中)、易于解决主从同步问题,并发问题。
    不足:占用了内存空间、缓存数据有大小限制、数据不易持久化存储。(但是内存缓存带给我们的方便足够可以忽略他的不足)
    常用内存缓存:Memcached、Redis、MonGoDB

MemcachedRedisMongoDB
储存数据类型stringstring, list, hash, setbson 丰富查询方式
数据储存位置内存内存 + 硬盘内存 + 硬盘
持久化最长30天RDB 文件快照,AOF(记录写操作)持久化journal持久化
使用场景Session 商品缓存(缓存 < 1MB)缓存、队列日志、区域信息、评论

php opcode缓存

PHP Opcode原理

Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.net的MSL,举个例子,比如你写下了如下的PHP代码

<?php
   echo "Hello World";
   $a = 1 + 1;
   echo $a;
?>

PHP执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)

1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
2.Parsing, 将Tokens转换成简单而有意义的表达式
3.Compilation, 将表达式编译成Opocdes
4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

 学过编译原理的同学都应该对编译原理中的词法分析步骤有所了解,Lex就是一个词法分析的依据表。 Zend/zend_language_scanner.c会根据Zend/zend_language_scanner.l(Lex文件),来输入的 PHP代码进行词法分析,从而得到一个一个的“词”,PHP4.2开始提供了一个函数叫token_get_all,这个函数就可以讲一段PHP代码 Scanning成Tokens;如果用这个函数处理前面的PHP代码,将会得到如下结果:

Array
(
    [0] => Array
        (
           [0] => 367
           [1] => Array
        (
            [0] => 316
            [1] => echo
        )
    [2] => Array
        (
            [0] => 370
            [1] =>
        )
    [3] => Array
        (
            [0] => 315
            [1] => "Hello World"
        )
    [4] => ;
    [5] => Array
        (
            [0] => 370
            [1] =>
        )
    [6] => =
    [7] => Array
        (
            [0] => 370
            [1] =>
        )
    [8] => Array
        (
            [0] => 305
            [1] => 1
        )
    [9] => Array
        (
            [0] => 370
            [1] =>
        )
    [10] => +
    [11] => Array
        (
            [0] => 370
            [1] =>
        )
    [12] => Array
        (
            [0] => 305
            [1] => 1
        )
    [13] => ;
    [14] => Array
        (
            [0] => 370
            [1] =>
        )
    [15] => Array
        (
            [0] => 316
            [1] => echo
        )
    [16] => Array
        (
            [0] => 370
            [1] =>
        )
    [17] => ;
)

分析这个返回结果我们可以发现,源码中的字符串,字符,空格,都会原样返回。每个源代码中的字符,都会出现在相应的顺序处。而,其他的比如标签,操作符,语句,都会被转换成一个包含俩部分的Array: Token ID (也就是在Zend内部的改Token的对应码,比如,T_ECHO,T_STRING),和源码中的原来的内容。
  接下来,就是Parsing阶段了,Parsing首先会丢弃Tokens Array中的多于的空格,然后将剩余的Tokens转换成一个一个的简单的表达式

1.echo a constant string
2.add two numbers together
3.store the result of the prior expression to a variable
4.echo a variable

  然后就改Compilation阶段了,它会把Tokens编译成一个个op_array, 每个op_arrayd包含如下5个部分:

1.Opcode数字的标识,指明了每个op_array的操作类型,比如add , echo
2.结果 存放Opcode结果
3.操作数1 给Opcode的操作数
4.操作数2
5.扩展值1个整形用来区别被重载的操作符

  比如,我们的PHP代码会被Parsing成:

* ZEND_ECHO 'Hello World'
* ZEND_ADD ~0 1 1
* ZEND_ASSIGN !0 ~0
* ZEND_ECHO !0

 php文件缓存

因为如果程序访问数据库时数据量较大,执行起来会比较慢。而且每一次刷新页面都会访问依稀数据库,然后再把数据显示在页面上。 设置缓存也有一个缺点,那就是缓存时间要设置好,如果缓存时间较长,那么数据库数据变化时,不能及时的在页面上显示。例如缓存不能用在秒杀商品,或者出售商品上面,因为数量不能及时的更新。

<?php
//缓存文件一般都放在caches文件夹里面。

//定义一个该页面的缓存文件路径,也就是该缓存的文件放在哪个文件夹里面。

$filename = "../cache/testhuancun.html";//定义了一个缓存的文件,文件名为testhuancun.html,位置在../cache文件夹里面。

//设置一个缓存时间
$time = 10;//代表缓存时间设置为10s.

//判断缓存文件是否存在
if(!file_exists($filename) || filemtime($filename)+$time<time())
//判断文件是否存在,如果不存在,执行{}里面的代码。还要判断缓存时间有没有过,如果已经过了,要重新读取数据库更新缓存。
//filemtime($filename)读取文件最后被修改的时间,time()取当前时间戳

{
    //开启内存缓存
    ob_start();//这里开启内存缓存以后,下面要输出的内容全部放在内存缓存里面。

    include("../init.inc.php");
    include("../DBDA.php");
    $db = new DBDA();
    $sql = "select * from nation";
    $attr = $db->Query($sql);
    $smarty->assign("nation",$attr);
    $smarty->display("test.html");

    //把内存里面的内容读出来
    $nr = ob_get_contents();//ob就是代表的缓存,读取的内容就是整个静态页面。

    //将读到的内容存放到缓存文件
    file_put_contents($filename,$nr);//get是取出内容,put是往里放内容,把内存缓存的文件存到¥filename里面。


    //清除内存缓存
    ob_flush();//把内存缓存的内容清除掉,不让它们继续留在缓存内存里面,但是需要缓存的内容已经放在了$filename里面了,已经保存下来了。

    echo "#############################";//输出内容加上一句话,观察输出内容是输出的缓存页面还是加载数据库的页面。这句话放在了ob_flush后面,不会被清除掉。
}
else//如果缓存文件存在,直接将缓存文件拿到页面显示。
{
    include($filename);//将缓存的页面加载到显示页面中
}

到此这篇关于使用php数据缓存技术提高执行效率的文章就介绍到这了,更多相关php数据缓存技术内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 使用php数据缓存技术提高执行效率

本文链接: https://www.lsjlt.com/news/174828.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用php数据缓存技术提高执行效率
    目录PHP 缓存介绍什么是缓存缓存作用常用缓存类型PHP 常用内存缓存介绍php opcode缓存 php文件缓存为什么要使用php缓存技术?理由很简单:提高效率。在程序开...
    99+
    2022-12-14
    php数据缓存技术 php提高执行效率
  • 如何使用 PHP 缓存打包技术提高存储效率?
    随着互联网的飞速发展,网站的访问量也越来越大,这也就意味着对于网站的存储需求也越来越大。为了提高存储效率,PHP缓存打包技术是一个非常好的选择。本文将详细介绍如何使用PHP缓存打包技术提高存储效率。 一、什么是PHP缓存打包技术 在介绍PH...
    99+
    2023-06-19
    缓存 打包 存储
  • PHP 缓存技术如何提高 Linux 开发效率?
    随着互联网的不断发展,PHP 作为一门强大而又灵活的语言,被越来越多的开发者所使用。但是,随着代码量的增加,PHP 应用程序的性能问题也日益凸显。为了提高开发效率,开发者们需要寻求一些有效的解决方案。其中,PHP 缓存技术就是一种非常好的...
    99+
    2023-08-18
    缓存 linux 开发技术
  • PHP中如何使用Memcache缓存技术提高Web应用的数据管理效率
    PHP是一门广泛应用于Web开发的编程语言,而Memcache缓存技术则是一个常用的数据管理方案。 将二者结合使用可以显著提高Web应用的数据管理效率。本文将介绍如何使用Memcache缓存技术来优化Web应用的数据管理。一、什么是Memc...
    99+
    2023-05-15
    PHP Memcache 缓存技术
  • 在PHP中使用Memcache缓存技术提高优先队列的效率
    随着社会的不断发展,人们对于计算机技术的要求也变得越来越高。在计算机中,队列是一种非常重要的数据结构,能够帮助我们高效地解决很多问题。然而,在实际的应用过程中,队列的效率却往往会受到一些因素的限制,比如网络的延迟、查询数据库的速度等等。所以...
    99+
    2023-05-17
    PHP Memcache 优先队列
  • Java中使用缓存技术如何提高大数据数组的处理效率?
    Java作为一种高效的编程语言,被广泛应用于各种领域。在处理大数据数组时,缓存技术可以帮助我们提高程序的运行效率。本文将介绍Java中使用缓存技术如何提高大数据数组的处理效率,并演示一些相关的代码。 首先,让我们了解一下缓存技术。缓存是一种...
    99+
    2023-09-29
    缓存 数组 大数据
  • 存储优化:如何利用 PHP 缓存打包技术提高效率?
    在现代的 Web 开发中,存储优化是一个非常重要的话题。随着用户量的增加和访问量的上升,优化存储变得尤为重要。PHP 缓存打包技术是一种非常有效的优化存储方法,可以大大提高网站的性能和用户体验。本文将介绍 PHP 缓存打包技术,讲解其优势...
    99+
    2023-06-19
    缓存 打包 存储
  • Python缓存技术解密:如何高效利用缓存提升开发效率?
    Python 缓存技术解密:如何高效利用缓存提升开发效率? 在 Python 中,缓存技术是一个非常实用的技术,它可以大大提高程序的运行效率。本文将介绍 Python 中的缓存技术,并演示如何使用缓存来提升开发效率。 什么是缓存技术? 缓存...
    99+
    2023-06-28
    load 缓存 开发技术
  • 使用PHP中的Memcache缓存技术提高Web应用的负载均衡效率
    随着互联网的普及和Web应用的广泛使用,面对高并发的访问压力,提高Web应用的负载均衡效率是必不可少的。在这样的背景下,缓存技术成为了提高Web应用效率的重要手段之一。而其中的Memcache缓存技术,以其高效、快速、易于使用等优点,逐渐成...
    99+
    2023-05-15
    PHP Memcache 缓存技术
  • 如何使用 PHP 缓存打包技术进行高效存储?
    随着互联网的发展,网站的访问量越来越大,数据量也越来越庞大,这时候如何高效地存储数据就成为了开发者们需要解决的问题。PHP 缓存打包技术便是一种解决方案。 一、什么是缓存打包技术? 缓存打包技术是指将多个 PHP 文件打包成一个文件,并存...
    99+
    2023-06-19
    缓存 打包 存储
  • 如何在PHP开发中利用缓存技术提高路径处理效率?
    在PHP开发中,路径处理是一个非常常见的需求。例如,我们需要根据用户的请求路径来确定要执行的操作,或者需要根据路径来加载相应的模板文件。但是,路径处理往往会涉及到文件系统的操作,这会使得应用程序的性能受到影响。为了提高路径处理的效率,我们可...
    99+
    2023-08-26
    path 开发技术 缓存
  • PHP trait DTO:提高数据传输效率的关键技术
    简介:在现代软件开发中,数据传输是一个非常重要的环节。在大多数应用程序中,数据需要从一个地方传输到另一个地方,如从数据库到前端页面、从前端表单到后端处理逻辑等。而数据传输的效率直接影响了整个系统的性能和用户体验。为了提高数据传输的效率,我们...
    99+
    2023-10-21
    PHP dto trait
  • PHP中如何使用Memcache缓存技术提高数据读取性能
    随着互联网技术的发展,访问量爆增,如何提高网站的性能成为了一个刻不容缓的问题。而缓存技术是提高网站性能最常用的解决方案之一。PHP作为一种非常流行的后端开发语言,也提供了许多缓存技术,其中最常用的便是Memcache缓存技术。Memcach...
    99+
    2023-05-15
    PHP Memcache 缓存技术
  • PHP中使用Memcache缓存技术提高数据库的读写性能
    随着现代互联网的极速发展,越来越多的企业和开发者都面临着对系统性能的追求。性能优化早已成为IT从业者们的必备技能之一,而缓存技术就是提高系统性能的关键因素之一。在许多应用程序中,数据库是最常用的持久性存储介质,因此,在优化系统性能的过程中,...
    99+
    2023-05-16
    PHP Memcache 缓存技术
  • PHP如何用Memcache缓存技术提高数据访问速度
    这篇文章主要介绍“PHP如何用Memcache缓存技术提高数据访问速度”,在日常操作中,相信很多人在PHP如何用Memcache缓存技术提高数据访问速度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何...
    99+
    2023-07-06
  • PHP 容器技术:响应大数据时如何提高效率?
    PHP 是一种非常流行的编程语言,尤其在 Web 开发中广泛应用。然而,当处理大量数据时,PHP 的效率可能会变得很低下。这时,容器技术可以为 PHP 应用程序提供一些有用的解决方案,以提高其效率和可靠性。 容器技术是一种轻量级的虚拟化技...
    99+
    2023-06-15
    容器 响应 大数据
  • 如何在PHP应用中使用Memcache提高缓存效率?
    随着互联网的快速发展,数据的处理和传输成为了各个应用开发的重中之重。而在数据处理的同时,缓存的应用也随着数据流量的增加得到了广泛的使用,可以降低服务器资源的消耗,加速页面加载的速度,更可以避免某些请求超时情况的频繁出现。其中,Memcach...
    99+
    2023-11-07
    PHP Memcache 缓存效率
  • 如何利用 PHP 技术实现分布式缓存并提高并发访问效率?
    分布式缓存是现代应用程序必须考虑的重要问题之一。而PHP作为流行的Web开发语言,其缓存技术也得到了广泛的应用。本文将介绍如何使用PHP技术实现分布式缓存,并提高并发访问效率。 什么是分布式缓存? 分布式缓存是将缓存数据分布在多个节点上,以...
    99+
    2023-09-22
    分布式 并发 缓存
  • 如何使用 PHP 缓存打包技术进行高效存储和管理?
    PHP 是一种常用的服务器端脚本语言,它被广泛应用于 web 开发中。在 web 应用中,缓存是一种非常重要的技术,它可以显著提高应用程序的性能。本文将介绍如何使用 PHP 缓存打包技术进行高效存储和管理。 缓存是一种将数据存储在内存中的技...
    99+
    2023-06-19
    缓存 打包 存储
  • PHP中怎么使用Memcache缓存技术提高数据库的读写性能
    这篇文章主要介绍“PHP中怎么使用Memcache缓存技术提高数据库的读写性能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP中怎么使用Memcache缓存技术提高数据库的读写性能”文章能帮助大...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作