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 header()函数使用说明
Jul 10 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
php文档更新介绍
Jul 22 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
May 23 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
一文搞懂PHP中的抽象类和接口
May 25 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
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
python实现程序重启和系统重启方式
2020/04/16 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
新学期家长寄语
2014/01/19 职场文书
乡下人家教学反思
2014/02/01 职场文书
文员岗位职责范本
2014/03/08 职场文书
土地转让协议书
2014/04/15 职场文书
高中语文教学反思范文
2016/02/16 职场文书
详解Redis瘦身指南
2021/05/26 Redis
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python