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学习之PHP运算符
Oct 09 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &
Feb 09 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
PHP安全性漫谈
Jun 28 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
最常用的8款PHP调试工具
Jul 06 PHP
php输出xml必须header的解决方法
Oct 17 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
PHP实现的策略模式示例
Mar 20 PHP
Yii框架的redis命令使用方法简单示例
Oct 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
基于mysql的论坛(2)
2006/10/09 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
最新茶叶店创业计划书
2014/01/14 职场文书
元旦晚会感言
2014/03/12 职场文书
单位租房协议范本
2014/12/03 职场文书
工作时间证明
2015/06/15 职场文书
基于Python实现股票收益率分析
2022/04/02 Python