PHP数据缓存技术


Posted in PHP onFebruary 14, 2007

数据缓存是web开发中常用的一种性能优化方法。目前主要文件缓存或者数据库缓存两种形式,数据库缓存数据库不是什么不可能的事情,的确也是很好很重要的。我认为传统数据库主要是从业务层、模块设计等方面来考虑的,而缓存数据库主要是从实现层来设计的,主要是为了缓存常用的多表查询之类的。这里主要将的是文件缓存,网上很多资料了,这里我转载了一些原理资料。
   Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。


<?
// load data with cache  function load_data($id,$cache_lifetime) {  // the return data  $data = array();  // make cache filename  $cache_filename ‘cache_‘.$id..php‘// check cache file‘s last modify time  $cache_filetime filemtime($cache_filename); 

if (

time() - $cache_filetime <= $cache_lifetime) {  //** the cache is not expire  include($cache_filename); 

} else { 

//** the cache is expired 

// load data from database 

// ... 

while ($dbo->nextRecord()) {  // $data[] = ...  // format the data as a php file  $data_cache "

while (list($key, $val) = each($data)) { 

$data_cache .= "

$data[‘$key‘]=array("; 

$data_cache .= "

‘NAME‘=>"".qoute($val[‘NAME‘])."\","  $data_cache .= "‘VALUE‘=>\"".qoute($val[‘VALUE‘])."\""  $data_cache .= ";);\r\n"

$data_cache "?>\r\n"// save the data to the cache file  if ($fd fopen($cache_filename,‘w+)) {  fputs($fd,$data_cache);  fclose($fd); 

return 

$data

?> 

适用情况:
1.数据相对比较稳定,主要是读取操作。
2.文件操作要比数据库操作快。
3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。
4.Web/DB分离结构或者多Web单DB结构。

未经证实的问题:
1.并发访问时对文件的读写是否会引起锁定问题。
2.涉及到的数据文件太多时,性能如何。
扩展思路:
1.生成JavaScript数据定义代码,在客户端调用。
2.还未想到……  

望共同探讨。

PHP 相关文章推荐
PHP新手上路(九)
Oct 09 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
再次研究下cache_lite
Feb 14 #PHP
cache_lite试用
Feb 14 #PHP
一个捕获函数输出的函数
Feb 14 #PHP
模拟flock实现文件锁定
Feb 14 #PHP
回答PHPCHINA上的几个问题:URL映射
Feb 14 #PHP
简单采集了yahoo的一些数据
Feb 14 #PHP
自己前几天写的无限分类类
Feb 14 #PHP
You might like
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
关于js类的定义
2011/06/28 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
简单实现jQuery多选框功能
2017/01/09 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
js cavans实现静态滚动弹幕
2020/05/21 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
值得收藏的10道python 面试题
2019/04/15 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
小学毕业感言300字
2014/02/19 职场文书
网管求职信
2014/03/03 职场文书
食品销售计划书
2014/04/26 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
党性教育心得体会
2014/09/03 职场文书
大学生入党群众意见书
2015/06/02 职场文书
导游词之江西赣州
2019/10/15 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript