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 遍历XP文件夹下所有文件
Nov 27 PHP
又一个php 分页类实现代码
Dec 03 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
php链表用法实例分析
Jul 09 PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 PHP
使用WAMP搭建PHP本地开发环境
May 10 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
使用PHP批量生成随机用户名
2008/07/10 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
js里面的变量范围分享
2020/07/18 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
如何使用python操作vmware
2019/07/27 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
自荐信不宜过于夸大
2013/11/06 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
施工安全协议书范本
2014/09/26 职场文书
父亲节感言
2015/08/03 职场文书
公司管理制度范本
2015/08/03 职场文书
家访教师心得体会
2016/01/23 职场文书
自考生自我评价
2019/06/21 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
用Python提取PDF表格的方法
2021/04/11 Python
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android