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.ini中文版(1)
Oct 09 PHP
增加反向链接的101个方法 站长推荐
Jan 31 PHP
一个很不错的PHP翻页类
Jun 01 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
php分页示例分享
Apr 30 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
PHP实现简单数字分页效果
Jul 26 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
PHP __call()方法实现委托示例
May 20 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
PHPCMS的使用小结
2010/09/20 PHP
PHP操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
详解vue axios中文文档
2017/09/12 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
Python实现包含min函数的栈
2016/04/29 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
成人教育自我鉴定
2013/11/01 职场文书
国博复兴之路观后感
2015/06/02 职场文书
高中英语教学反思范文
2016/03/02 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android