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 中的类
Oct 09 PHP
用PHP连mysql和oracle数据库性能比较
Oct 09 PHP
社区(php&&mysql)五
Oct 09 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
php5编程中的异常处理详细方法介绍
Jul 29 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
php-fpm重启导致的程序执行中断问题详解
Apr 29 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 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
晶体管来复再生式二管收音机
2021/03/02 无线电
德生PL550的电路分析
2021/03/02 无线电
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
java解析json方法总结
2019/05/16 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
利用Python爬虫给孩子起个好名字
2017/02/14 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
自荐信的两点禁忌
2013/10/30 职场文书
大学毕业生通用自荐信范文
2013/10/31 职场文书
幼教个人求职信范文
2013/12/02 职场文书
安全生产专项整治方案
2014/05/06 职场文书
工作岗位说明书模板
2014/05/09 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
2015年资料员工作总结
2015/04/25 职场文书
亮剑观后感600字
2015/06/05 职场文书
对讲机知识
2022/04/07 无线电
源码安装apache脚本部署过程详解
2022/09/23 Servers