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 相关文章推荐
文件系统基本操作类
Nov 23 PHP
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
PHP获取类私有属性的3种方法
Sep 10 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摘要生成函数(无乱码)
2012/02/04 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python中OrderedDict的使用方法详解
2017/05/05 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Python内存映射文件读写方式
2020/04/24 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
我的求职择业计划书
2014/04/04 职场文书
老人节标语大全
2014/10/08 职场文书
2014年节能工作总结
2014/12/18 职场文书
经营目标责任书
2015/05/08 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书