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连接Oracle for NT 远程数据库
Oct 09 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
array_multisort实现PHP多维数组排序示例讲解
Jan 04 PHP
php存储过程调用实例代码
Feb 03 PHP
php中get_object_vars()方法用法实例
Feb 08 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
laravel 自定义常量的两种方案
Oct 14 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系列学习之日期函数使用介绍
2012/08/18 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
Python实现k-means算法
2018/02/23 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
承诺函范文
2015/01/21 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript