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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 PHP
php+mysql 实现身份验证代码
Mar 24 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
php 数组的一个悲剧?
May 11 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
file_get_contents("php://input", "r")实例介绍
Jul 01 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
php实现小程序支付完整版
Oct 09 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
初识Laravel
2014/10/30 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
Python字符串处理函数简明总结
2015/04/13 Python
Python中查看文件名和文件路径
2017/03/31 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
python之array赋值技巧分享
2019/11/28 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
高中生职业生涯规划书
2014/02/24 职场文书
项目投资意向书
2014/04/01 职场文书
活动宣传稿范文
2015/07/23 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL
Python利用FlashText算法实现替换字符串
2022/03/31 Python