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 相关文章推荐
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
默默简单的写了一个模板引擎
Jan 02 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
Yii2框架控制器、路由、Url生成操作示例
May 27 PHP
Laravel 错误提示本地化的实现
Oct 22 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设计模式之命令模式的应用详解
2013/05/21 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
PHP加密解密函数详解
2015/10/28 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP实现的策略模式示例
2019/03/20 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
Python语言描述最大连续子序列和
2017/12/05 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
寄语学生的话
2014/04/10 职场文书
商场促销活动总结
2014/07/10 职场文书
实习生工作证明范本
2014/09/14 职场文书
会议简报格式范文
2015/07/20 职场文书