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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
PHP的PDO操作简单示例
Mar 30 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
php png失真的原因及解决办法
Oct 24 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 删除记录实现代码
2009/03/12 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
python 把数据 json格式输出的实例代码
2016/10/31 Python
python正则表达式的使用
2017/06/12 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
学前班教师的自我鉴定
2013/12/05 职场文书
个人课题方案
2014/05/08 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
python三子棋游戏
2022/05/04 Python
Hive HQL支持2种查询语句风格
2022/06/25 数据库