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 相关文章推荐
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
Jul 09 PHP
用Flash图形化数据(二)
Oct 09 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
php文件上传 你真的掌握了吗
Nov 28 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 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 array 的加法操作代码
2010/07/24 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
python九九乘法表的实例
2017/09/26 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
python编写微信公众号首图思路详解
2019/12/13 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
英语系本科生个人求职信
2013/09/21 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技