PHP中文件缓存转内存缓存的方法


Posted in PHP onDecember 06, 2011

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

原理
文件缓存转内存缓存的原理就是把文件缓存中的数据转存到内存中,以实现数据全局共享,解决频繁加载文件和装载数据的问题,采用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。

PHP 相关文章推荐
也谈 PHP 和 MYSQL
Oct 09 PHP
PHP中::、->、self、$this几种操作符的区别介绍
Apr 24 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
PHP编程风格规范分享
Jan 15 PHP
在Windows XP下安装Apache+MySQL+PHP环境
Feb 22 PHP
php递归遍历删除文件的方法
Apr 17 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 PHP
PHP6新特性分析
Mar 03 PHP
thinkPHP实现基于ajax的评论回复功能
Jun 22 PHP
解决php扩展安装不生效问题
Oct 25 PHP
微信小程序和php的登录实现
Apr 01 PHP
php urlencode()与urldecode()函数字符编码原理详解
Dec 06 #PHP
PHP中实现中文字符进制转换原理分析
Dec 06 #PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 #PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 #PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 #PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 #PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 #PHP
You might like
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
php实现微信发红包功能
2018/07/13 PHP
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
npm qs模块使用详解
2020/02/07 Javascript
Flask Web开发入门之文件上传(八)
2018/08/17 Python
python调用外部程序的实操步骤
2019/03/04 Python
Python实现数值积分方式
2019/11/20 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
马来西亚网上购物:Youbeli
2018/03/30 全球购物
大二学习计划书范文
2014/04/27 职场文书
委托函范文
2015/01/29 职场文书
开票员岗位职责
2015/02/12 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
php 原生分页
2021/04/01 PHP
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js