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初学者头疼十四条问题大总结
Nov 12 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
php函数连续调用实例分析
Jul 30 PHP
详解PHP中的状态模式编程
Aug 11 PHP
Yii2选项卡的简单使用
May 26 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 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
php实现图片等比例缩放代码
2015/07/23 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
PHP学习笔记之session
2018/05/06 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
python多线程下信号处理程序示例
2019/05/31 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python页面加载的等待方式总结
2021/02/28 Python
adidas泰国官网:adidas TH
2020/07/11 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
电子商务专业推荐信范文
2013/12/02 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
Python编程super应用场景及示例解析
2021/10/05 Python
vue中 this.$set的使用详解
2021/11/17 Vue.js