PHP中文件缓存转内存缓存的方法_php技巧

前言
顾名思义文件缓存转内存缓存就是将存储在文件中的数据转到内存中去,实现磁盘操作转为内存操作,这样可以大大提高数据访问速度,并能实现缓存数据的分布式部署。文件缓存与内存缓存的介绍请参考名词解释部分。

原理
文件缓存转内存缓存的原理就是把文件缓存中的数据转存到内存中,以实现数据全局共享,解决频繁加载文件和装载数据的问题,采用Memcache工具实现内存缓存数据。

实现机制与步骤
1,检查文件是否存在内存缓存,如果不存在加载缓存文件
2,加载缓存文件,并获取缓存文件中的数据
3,将缓存文件中的数据写入内存
4,从内存中获取数据,并将数据注册为全局变量
5,返回数据

这个过程中最主要处理两个问题,第一个问题是缓存文件加载,如果要实现文件缓存转内存缓存,就需要有一个统一的文件缓存路径调度服务,用于实现文件是否实现内存缓存机制。第二个问题是如何注册全局变量,不管是从文件中获取数据还是内存中获取,如果需要实现通用,就需要有一个注册全局变量的机制。

文件缓存路径调度服务这个问题实现比较简单,但成本比较高,因为需要重构现在的文件缓存加载路径方式。

普通的文件缓存加载方式

require 'cache/config.php';

文件缓存路径调度方式

require getCachePath('cache/config.php');

上例中getCachePath()函数实现文件缓存路径调度服务。

其次是注册全局变量问题,需要考虑到数据的全局通用性,因此在使用上就有很多的注意事项,经过研究发现如下两种注册全局变量方式
1,循环注册

复制代码 代码如下:

foreach ( $vars as $k => $v ) {
$GLOBALS[$k] = $v;
}

优点:重复键的情况下可保证最新的值正常
缺点:$vars数组的大小决定执行时间

2,直接追加

$GLOBALS += $vars;

优点:无循环,直接操作
缺点:如果键存在则不能写入

总结
文件缓存转内存缓存最主要处理文件加载方式与全局变量注册,在实际的应用过程中,要特别注意各缓存文件中变量名的不同,如果变量名存在相同,则可能在多个文件加载过程中造成数据覆盖。

在具体的开发实践中,能使用内存缓存则直接使用内存缓存,同时如果存在大量文件缓存加载的情况下,考虑实现文件缓存转内存缓存的机制。

名词解释
文件缓存是指将从数据库获取的数据存入文件中,这样下一次获取数据的时候就不需要从数据库获取而直接从文件中获取,这样就能够提升数据的访问速度,因此在很多的开源程序代码中都能看文件缓存的应用。

内存缓存是指将从数据库获取的数据存入内存中,目前应用比较广泛的如Memcache。

时间: 2025-01-29 12:44:18

PHP中文件缓存转内存缓存的方法_php技巧的相关文章

PHP使用memcache缓存技术提高响应速度的方法_php技巧

本文实例讲述了PHP使用memcache缓存技术提高响应速度的方法.分享给大家供大家参考.具体分析如下: php虽然己经做到很好很快了,但是如果大数据量时还是会有些卡了,这里介绍一下PHP中使用memcache缓存技术提高响应速度方法,有需要了解的朋友可参考. memcache既可以在linux下使用,也可以在windows系统下使用,当然首推linux系统,至于如何安装memcache,google一下就什么都出来了. 下面贴一段memcache的使用例子,代码如下: 复制代码 代码如下: <

php遍历、读取文件夹中图片并分页显示图片的方法_php技巧

本文实例讲述了php遍历.读取文件夹中图片并分页显示图片的方法.分享给大家供大家参考,具体如下: 引子:我的网站图片目录images下有若干图片如1.jpg.2.jpg.3.jpg.--.n.jpg.1.gif.2.gif.3.gif.--.n.gif,要求在该images目录下建一个index.php文件,使得该文件分页显示images目录下的所有图片. 下面是我想到的办法.不知道有没有更好的办法.呵呵...在图片文件夹images下面建一个index.php文件,内容如下: <?php ec

php ci框架中加载css和js文件失败的原因及解决方法_php技巧

在将html页面整合到ci框架里面的时候,加载css和js失败,弄了半天发现ci框架是入口的框架, 对框架中文件的所有请求都需要经过index.php处理完成,当加载外部的css和js文件的时候要使 用base_url()函数处理外部的链接. 比如: 在config配置文件中的base_url为:" localhost:8080/项目名称/ " 在控制器中访问application/resource/aaa.js文件 相对路径<script src= "resource

PHP利用APC模块实现文件上传进度条的方法_php技巧

本文实例讲述了PHP利用APC模块实现文件上传进度条的方法.分享给大家供大家参考.具体分析如下: 以前的php5.2之前的版本是不能可使用APC模块的,因为之前的压根就没有这个APC模块,如果想使用APC模块实现上传进度条我们必须是php5.2或更高版本. 从5.2开始APC加入了一个叫APC_UPLOAD_PROGRESS的东东,解决了困扰大家已久的进度条问题.并且它把原来的上传时把临时文件全部缓存到内存改成了当临时文件达到设定值时就自动保存到硬盘,有效地改善了内存利用状况. 它的作用原理是在

PHP获取文件扩展名的4种方法_php技巧

本文实例讲述了PHP获取文件扩展名的4种方法.分享给大家供大家参考,具体如下: $filename="123.jpg"; //方法一: function get_ext($file_name){ return array_pop(explode('.', $file_name)); //用.号对字符串进行分组 } echo get_ext($filename); //方法二: $fileEx=strtolower(substr(strrchr($filename,".&quo

PHP获取数组中重复最多的元素的实现方法_php技巧

本文实例讲述了PHP获取数组中重复最多的元素的实现方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: <?php  /**   *    * Created on 2014-4-1   * @param   array $array   * @param   int [optional] $length   * @return  array   */  function mostRepeatedValues($array,$length=0){      if(emptyempty

PHP针对常规模板引擎中与CSS/JSON冲突的解决方法_php技巧

本文实例讲述了PHP针对常规模板引擎中与CSS/JSON冲突的解决方法,有一定的实用价值,具体分析如下: 本文主要针对对象为Smarty与Dwoo 在Smarty中经常会出现和CSS/JS的语法存在冲突的情况,因为二者都需要使用大括号{}.虽然可以改Smarty的界定符,但你在一个现存系统中,去修改所有相关代码,是不划算的.解决方法如下: 1. 避免同时出现 通过外部引用的方式避免.问题是避无所避.所以这种情况只适合少量简单的情况. 2. 修改Smarty界定符 3.可以使用Smarty的lit

PHP上传文件时自动分配路径的方法_php技巧

本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的文件多了,我们就不能放在同一个目录了,这里我们就来讲讲用PHP自动给上传的文件分配路径的方法. PHP分配上传文件的路径实例 主要程序片段如下: 复制代码 代码如下: <?php    /*数字方式分配路径*/    function allotPath($id, $extend='jpg') {       $folders = st

PHP上传图片时判断上传文件是否为可用图片的方法_php技巧

本文实例讲述了PHP上传图片时判断上传文件是否为可用图片的方法.分享给大家供大家参考,具体如下: 这里利用getimagesize函数: function isImage($filename) { $types = '.gif|.jpeg|.png|.bmp'; //定义检查的图片类型 if(file_exists($filename)) { $info = getimagesize($filename); $ext = image_type_to_extension($info['2']);

php简单实现文件或图片强制下载的方法_php技巧

本文实例讲述了php简单实现文件或图片强制下载的方法.分享给大家供大家参考,具体如下: //下载 function downregcaseAction() { $file="upload/regcase.jpg"; if(isfile($file)) { header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=