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
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
php生成txt文件标题及内容的方法
Jan 16 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
php在数组中查找指定值的方法
Mar 17 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
PHP命名空间与自动加载类详解
Sep 04 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中使用excel的简单介绍
2013/08/02 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
js比较日期大小的方法
2015/05/12 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
微信小程序中为什么使用var that=this
2019/08/27 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
详解使用Python处理文件目录的相关方法
2015/10/16 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
python交互式图形编程实例(三)
2017/11/17 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
canvas烟花特效锦集
2018/01/17 HTML / CSS
超市后勤自我鉴定
2014/01/17 职场文书
讲解员培训方案
2014/05/04 职场文书
小组口号大全
2014/06/09 职场文书