返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP如何实现缓存技术
  • 606
分享到

PHP如何实现缓存技术

2023-06-17 15:06:21 606人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关PHP如何实现缓存技术的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php,一门最近几年兴起的WEB设计脚本语言,由于它的强大和可伸缩性,近几年来得到长足的发展,PHP相比传统的ASP网

这篇文章给大家分享的是有关PHP如何实现缓存技术的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

php,一门最近几年兴起的WEB设计脚本语言,由于它的强大和可伸缩性,近几年来得到长足的发展,PHP相比传统的ASP网站,在速度上有绝对的优势,想mssql转6万条数据PHP如需要40秒,ASP不下2分钟.但是,由于网站的数据越来越多,我们渴求能更快速的调用数据,不必要每次都从数据库掉,我们可以从其他的地方,比方一个文件,或者某个内存地址,这就是PHP的缓存技术,也就是Cache技术。

分析深入

一般来说,缓存的目的是把数据放在一个地方让访问的更快点,毫无疑问,内存是最快的,但是,几百M的数据能往内存放么?这不现实,当然,有的时候临时放如服务器缓存,如ob_start()这个缓存页面开启的话在发送文件头之前页面内容都被缓存在内存中,知道等页面输出自动清楚或者等待ob_get_contents的返回,或者被ob_end_clean显示的清除,这在静态页面的生成中能很好的利用,在模板中能得到很好的体现。

另外,在ASP中有一对象application,可以保存公用的参数,这也算点缓存,但在PHP,我至今没看到开发者产出这种对象,的确,没必要.asp.net的页面缓存技术就用的是viewstate,而cache就是文件关联,(不一定准确),文件被修改,更新缓存,文件没被修改而且不超时(注释1),就读取缓存,返回结果,就是这个思路,看看这个源码:

<?PHP class cache{    private $cache_dir;  private $expireTime=180;//缓存的时间是 60 秒  function __construct($cache_dirname){   if(!@is_dir($cache_dirname)){    if(!@mkdir($cache_dirname,0777)){    $this->warn('缓存文件不存在而且不能创建,需要手动创建.');    return false;    }   }  $this->cache_dir = $cache_dirname;  }  function __destruct(){   echo 'Cache class bye.';  }   function get_url() {          if (!isset($_SERVER['REQUEST_URI'])) {                  $url = $_SERVER['REQUEST_URI'];          }else{                  $url = $_SERVER['SCRIPT_NAME'];                  $url .= (!empty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';          }           return $url;  }
function warn($errorstring){  echo "<b><font color='red'>发生错误:<pre>".$errorstring."</pre></font></b>";  }   function cache_page($pageurl,$pagedata){   if(!$fso=fopen($pageurl,'w')){    $this->warns('无法打开缓存文件.');//trigger_error    return false;   }   if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型定    $this->warns('无法锁定缓存文件.');//trigger_error    return false;   }   if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式    $this->warns('无法写入缓存文件.');//trigger_error    return false;   }   flock($fso,LOCK_UN);//释放锁定   fclose($fso);   return true;  }   function display_cache($cacheFile){              if(!file_exists($cacheFile)){      $this->warn('无法读取缓存文件.');//trigger_error      return false;              }     echo '读取缓存文件:'.$cacheFile;  //return unserialize(file_get_contents($cacheFile));          $fso = fopen($cacheFile, 'r');          $data = fread($fso, filesize($cacheFile));          fclose($fso);   return $data;  }   function readData($cacheFile='default_cache.txt'){   $cacheFile = $this->cache_dir."/".$cacheFile;   if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){    $data=$this->display_cache($cacheFile);    }else{     $data="from here wo can get it from mysql database,update time is <b>".date('l dS \of F Y h:i:s A')."</b>,过期时间是:".date('l dS \of F Y h:i:s A',time()+$this->expireTime)."----------";     $this->cache_page($cacheFile,$data);   }    return $data;  }   }  ?>

下面我打断这个代码逐行解释.

程序透析

这个缓存类(类没什么好怕的.请继续看)名称是cache,有2个属性:

private $cache_dir;  private $expireTime=180;

$cache_dir是缓存文件所放的相对网站目录的父目录, $expireTime(注释一)是我们缓存的数据过期的时间,主要是这个思路:

当数据或者文件被加载的时候,先判断缓存文件存在不,返回false ,文件***修改时间和缓存的时间和比当前时间大不,大的话说明缓存还没到期,小的话返回false,当返回false的时候,读取原始数据,写入缓存文件中,返回数据。接着看程序:

function __construct($cache_dirname){   if(!@is_dir($cache_dirname)){    if(!@mkdir($cache_dirname,0777)){    $this->warn('缓存文件不存在而且不能创建,需要手动创建.');    return false;    }   }  $this->cache_dir = $cache_dirname;  }

当类***次被实例的时候构造默认函数带参数缓存文件名称,如文件不存在,创建一个有编辑权限的文件夹,创建失败的时候抛出异常.然后把cache类的 $cache_dir属性设置为这个文件夹名称,我们的所有缓存文件都是在这个文件夹下面的.

function __destruct(){   echo 'Cache class bye.';  }

这是class类的析构函数,为了演示,我们输出一个字符串表示我们释放cache类资源成功.

function warn($errorstring){  echo "<b><font color='red'>发生错误:<pre>".$errorstring."</pre></font></b>";  }

这个方法输出错误信息:

function get_url() {          if (!isset($_SERVER['REQUEST_URI'])) {                  $url = $_SERVER['REQUEST_URI'];          }else{                  $url = $_SERVER['SCRIPT_NAME'];                  $url .= (!empty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';          }           return $url;  }

这个方法返回当前url的信息,这是我看国外很多人的cms系统这样做,主要是缓存x.PHP?page=1,x.PHP?page=2,等这种文件的,这里列出是为了扩展的这个cache类功能的。

function cache_page($pageurl,$pagedata){   if(!$fso=fopen($pageurl,'w')){    $this->warns('无法打开缓存文件.');//trigger_error    return false;   }   if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型锁定    $this->warns('无法锁定缓存文件.');//trigger_error    return false;   }   if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式    $this->warns('无法写入缓存文件.');//trigger_error    return false;   }   flock($fso,LOCK_UN);//释放锁定   fclose($fso);   return true;  }

cache_page方法分别传入的是缓存的文件名称和数据,这是把数据写到文件里的方法,先用fopen打开文件,然后调用句柄锁定这个文件,然后用fwrite写入文件,***释放这个句柄,任何一步发生错误将抛出错误. 您可能看到这个注释:

写入字节流,serialize写入其他格式,顺便一提的是如果我们要把一个数组,(可以从Mysql数据库里面select查询除了的结果)用serialize函数写入,用unserialize读取到原来的类型。

function display_cache($cacheFile){              if(!file_exists($cacheFile)){      $this->warn('无法读取缓存文件.');//trigger_error      return false;              }     echo '读取缓存文件:'.$cacheFile;  //return unserialize(file_get_contents($cacheFile));          $fso = fopen($cacheFile, 'r');          $data = fread($fso, filesize($cacheFile));          fclose($fso);   return $data;  }

这是由文件名称读取缓存的方法,直接打开文件,读取全部,如果文件不存在的或者无法读取的话返回false,当然,你感到不人性的话,可以重新生成缓存.

function readData($cacheFile='default_cache.txt'){   $cacheFile = $this->cache_dir."/".$cacheFile;   if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){    $data=$this->display_cache($cacheFile);    }else{     $data="from here wo can get it from mysql database,update time is <b>".date('l dS \of F Y h:i:s A')."</b>,过期时间是:".date('l dS \of F Y h:i:s A',time()+$this->expireTime)."----------";     $this->cache_page($cacheFile,$data);   }    return $data;  }

这个函数是我们调用的方法,可以写成接口的方法,由传入参数判断文件存在不,文件***修改时间+expireTime的时间是不是过了当前时间(大于的话说明没有过期),如果文件不存在或者已经过期,重新加载原始数据,这里,为了简单期间,我们是直接源是字符串,您可以把cache类继承某类,取到数据库的数据.(注释2)

感谢各位的阅读!关于“PHP如何实现缓存技术”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: PHP如何实现缓存技术

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

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

猜你喜欢
  • PHP如何实现缓存技术
    这篇文章给大家分享的是有关PHP如何实现缓存技术的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP,一门最近几年兴起的Web设计脚本语言,由于它的强大和可伸缩性,近几年来得到长足的发展,PHP相比传统的ASP网...
    99+
    2023-06-17
  • PHP如何实现web缓存技术
    本篇内容介绍了“PHP如何实现web缓存技术”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Web缓存的概念Web缓存是指将已被访问过或预...
    99+
    2023-07-05
  • PHP中怎么实现缓存技术
    这篇文章主要为大家展示了“PHP中怎么实现缓存技术”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP中怎么实现缓存技术”这篇文章吧。全页面静态化缓存也就是将页面全部生成html静态页面,用户访...
    99+
    2023-06-16
  • 如何在 Linux 上实现高效的 PHP 缓存技术?
    在 Linux 系统上,PHP 是一种非常流行的服务器端脚本语言,但是它的性能并不总是能够满足高流量网站的要求。为了提高 PHP 应用程序的性能,我们可以采用一些高效的缓存技术。本文将介绍一些在 Linux 上实现高效的 PHP 缓存技术,...
    99+
    2023-08-18
    缓存 linux 开发技术
  • PHP 缓存打包技术:如何实现高效存储和管理?
    随着互联网技术的不断发展,PHP 作为一种广泛应用于 Web 开发的编程语言,其性能优化问题也越来越受到开发者的关注。其中,缓存技术是提高 PHP 应用性能的常见手段之一。而缓存打包技术,则更进一步实现了高效存储和管理。 一、缓存的基本概...
    99+
    2023-06-19
    缓存 打包 存储
  • 浅析PHP怎么实现web缓存技术
    随着互联网的快速发展,网站的用户访问量不断增加,对服务器的负担也在不断增大,这时候采用Web缓存技术可以显著地减轻服务器的负担,提高用户访问速度、网站性能和稳定性。本文将介绍PHP如何实现Web缓存技术。一、Web缓存的概念Web缓存是指将...
    99+
    2023-05-14
    php
  • PHP中的缓存技术
    随着互联网的不断发展,Web应用程序越来越普及,而这些应用程序的性能和响应速度越来越关键。为了提高Web应用程序的性能,缓存技术成为了一个必不可少的工具。PHP作为一种常用的Web编程语言,也提供了许多缓存技术来优化Web应用程序的性能。本...
    99+
    2023-05-24
    缓存技术 PHP 缓存 PHP 性能优化
  • Memcache缓存技术如何构建PHP中的缓存架构
    随着互联网时代的到来,Web应用程序的访问量越来越大,同时性能也愈发成为用户优先考量因素之一。缓存技术因此应运而生。Memcache作为一种高性能、分布式的内存对象缓存系统,被广泛应用于Web开发中。在PHP中构建Memcache缓存架构,...
    99+
    2023-05-15
    PHP Memcache 缓存架构
  • PHP缓存技术的实例应用
    本篇内容主要讲解“PHP缓存技术的实例应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP缓存技术的实例应用”吧!之前我们曾深入的探讨过PHP缓存技术,其中主要提到了数据缓存。数据缓存主要是...
    99+
    2023-06-17
  • PHP中Memcached缓存技术的实现和原理
    Memcached是一种高速缓存系统,被广泛应用于Web服务器和其他需要缓存数据的场合。在PHP开发中,Memcached常用于提升应用程序的性能和优化数据库访问。本文将介绍Memcached缓存技术的实现和原理。一、Memcached的基...
    99+
    2023-05-16
    PHP memcached 缓存技术
  • redis缓存技术如何运用
    Redis是一种高性能的缓存技术,可以在许多场景中运用。1. 数据库查询缓存:将数据库查询的结果缓存到Redis中,下次查询时可以直...
    99+
    2023-08-24
    redis
  • PHP 缓存开发技术,如何打包才能实现最佳性能?
    PHP 缓存技术是提升网站性能的重要手段。在网站访问量较大的情况下,使用 PHP 缓存技术可以大幅提升网站的访问速度。但是,如果缓存技术使用不当,也会带来一定的风险。本文将为您介绍 PHP 缓存开发技术,并讲解如何打包才能实现最佳性能。 ...
    99+
    2023-06-19
    缓存 开发技术 打包
  • Memcache缓存技术对于PHP文件缓存的作用和实现方法
    随着互联网应用程序的不断发展,对于Web网站的访问量和数据处理量的提高,程序的性能变得越来越重要。而程序性能的优化,对于一个高流量的网站来说,是至关重要的。而Web应用性能提高的关键就在于缓存。Memcache缓存技术是一个为提高Web应用...
    99+
    2023-05-17
    Memcache 缓存技术 PHP文件缓存
  • 系统讲解PHP缓存技术
    本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了缓存技术的相关内容,缓存已经成了项目中必不可少的一部分,是提高性能最好的方式,下面一起来看一下,希望对大家有帮助。概述缓存已经成了项目中是必不可少的一部分,它是提高性能最好的方式,例如...
    99+
    2023-05-14
    php
  • PHP开发缓存的实现方法与技术选型
    随着互联网应用的不断发展,Web应用的访问量也与日俱增。而为了提高Web应用的性能和响应速度,缓存成为不可或缺的重要组成部分。在PHP开发中,实现缓存可以通过多种方法完成,本篇文章将从缓存的概念入手,重点介绍了解决方案的技术选型与具体代码示...
    99+
    2023-11-07
    缓存 PHP开发 技术选型
  • 浏览器缓存技术实现浅析
    目录什么是浏览器缓存如何实现浏览器缓存ExpiresCache-ControlLast-Modified 和 If-Modified-SinceETag 和 If-None-Matc...
    99+
    2023-05-18
    浏览器缓存技术 浏览器缓存
  • PHP 缓存技术如何提高 Linux 开发效率?
    随着互联网的不断发展,PHP 作为一门强大而又灵活的语言,被越来越多的开发者所使用。但是,随着代码量的增加,PHP 应用程序的性能问题也日益凸显。为了提高开发效率,开发者们需要寻求一些有效的解决方案。其中,PHP 缓存技术就是一种非常好的...
    99+
    2023-08-18
    缓存 linux 开发技术
  • Python 分布式缓存,如何实现高效开发技术?
    Python分布式缓存,如何实现高效开发技术? 随着互联网应用的发展,数据量越来越大,对于系统的性能和效率要求也越来越高。而分布式缓存技术则成为了解决这个问题的重要途径之一。Python作为一门高效的编程语言,也提供了很多分布式缓存的库和框...
    99+
    2023-11-07
    分布式 缓存 开发技术
  • ASP技术如何应用于实时缓存中?
    随着互联网的发展,数据量的增加,实时数据的处理越来越成为重要的问题。实时数据的处理需要高效的数据缓存技术,而ASP技术正是其中的一种重要的缓存技术。 ASP技术是一种动态网页技术,它可以将动态数据储存在缓存中,这样可以加快数据的传输速度,...
    99+
    2023-11-15
    leetcode 实时 缓存
  • 存储技巧分享:如何使用 PHP 缓存打包技术优化存储?
    在 Web 开发中,缓存是一项非常重要的技术,可以有效地提高网站的性能和响应速度。PHP 缓存打包技术是一种常用的优化存储的方法,可以将多个文件打包成一个文件,从而减少文件数量,降低文件系统的负担,提高网站的响应速度。本文将介绍如何使用 ...
    99+
    2023-06-19
    缓存 打包 存储
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作