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顺序查找和二分查找示例
Mar 27 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
php对文件进行hash运算的方法
Apr 03 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
Symfony2函数用法实例分析
Mar 18 PHP
Thinkphp单字母函数使用指南
May 08 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
php中__toString()方法用法示例
Dec 07 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 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
常用PHP数组排序函数归纳
2016/08/08 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
Bootstrap table使用方法汇总
2017/11/17 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
python 产生token及token验证的方法
2018/12/26 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
python redis 删除key脚本的实例
2019/02/19 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python 错误处理 assert详解
2020/04/20 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
后勤人员自我评价怎么写
2013/09/19 职场文书
运动会领导邀请函
2014/02/05 职场文书
万年牢教学反思
2014/02/15 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
英文感谢信范文
2015/01/21 职场文书
护士先进个人总结
2015/02/13 职场文书
政审证明范文
2015/06/19 职场文书
旅行社计调工作总结
2015/08/12 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers