PHP缓存技术的使用说明


Posted in PHP onAugust 06, 2011

在大部份情况下我们的网站都会使用数据库作为站点数据存储的容器。当你执行一个SQL查询时,典型的处理过程是:连接数据库->准备 SQL查询->发送查询到数据库->取得数据库返回结果->关闭数据库连接。但数据库中有些数据是完全静态的或不太经常变动的,缓存系统会通过把SQL查询的结果缓存到一个更快的存储系统中存储,从而避免频繁操作数据库而很大程度上提高了程序执行时间,而且缓存查询结果也允许你后期处理。

普遍使用的PHP缓存技术

PHP缓存技术之数据缓存:

这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存文件中获得。

PHP缓存技术之页面缓存:

每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

PHP缓存技术之内存缓存:

在里就不介绍了,不是本文所要讨论的,只简单提一下:

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

dbcached 是一款基于 Memcached 和 NMDB 的分布式 key-value 数据库内存缓存系统。

以上的缓存技术虽然能很好的解决频繁查询数据库的问题,但其缺点在在于数据无时效性,下面我给出我在项目中常用的方法:

PHP缓存技术之时间触发缓存:

检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

设定时间内不去判断数据是否要更新,过了设定时间再更新缓存。以上只适合对时效性要求不高的情况下使用,否则请看下面。

PHP缓存技术之内容触发缓存:

当插入数据或更新数据时,强制更新缓存。

在这里我们可以看到,当有大量数据频繁需要更新时,最后都要涉及磁盘读写操作。怎么解决呢?我在日常项目中,通常并不缓存所有内容,而是缓存一部分不经常变的内容来解决。但在大负荷的情况下,最好要用共享内存做缓存系统。

到这里PHP缓存也许有点解决方案了,但其缺点是,因为每次请求仍然要经过PHP解析,在大负荷的情况下效率问题还是比效严重,在这种情况下,也许会用到静态缓存。

PHP缓存技术之静态缓存

这里所说的静态缓存是指HTML缓存,HTML缓存一般是无需判断数据是否要更新的,因为通常在使用HTML的场合一般是不经常变动内容的页面。数据更新的时候把HTML也强制更新一下就可以了。

PHP 相关文章推荐
PHP令牌 Token改进版
Jul 18 PHP
基于php下载文件的详解
Jun 02 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
Mar 18 PHP
PHP中is_dir()函数使用指南
May 08 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
PHP与SQL语句常用大全
Dec 10 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 PHP
PHP header函数分析详解
Aug 06 #PHP
php 文件上传类代码
Aug 06 #PHP
php代码运行时间查看类代码分享
Aug 06 #PHP
discuz程序的PHP加密函数原理分析
Aug 05 #PHP
PHP源码之explode使用说明
Aug 05 #PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 #PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 #PHP
You might like
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
JQuery循环滚动图片代码
2011/12/08 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
python读文件的步骤
2019/10/08 Python
python numpy中cumsum的用法详解
2019/10/17 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
中华魂演讲稿
2014/05/13 职场文书
产品包装策划方案
2014/05/18 职场文书
组工干部演讲稿
2014/09/02 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
个人贷款收入证明
2014/10/26 职场文书
环卫工人慰问信
2015/02/15 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
节约用水广告语60条
2019/11/14 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫
Go语言编译原理之源码调试
2022/08/05 Golang