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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
php中的MVC模式运用技巧
May 03 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
May 09 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
php数组去重实例及分析
Nov 26 PHP
PHP代码优化的53个细节
Mar 03 PHP
php中header跳转使用include包含解决参数丢失问题
May 08 PHP
PHP整合PayPal支付
Jun 11 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
PHP中include和require的区别实例分析
May 07 PHP
详细解读php的命名空间(二)
Feb 21 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(7) php 字符串相关应用
2010/03/05 PHP
PHP中读写文件实现代码
2011/10/20 PHP
php之XML转数组函数的详解
2013/06/07 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
小程序实现tab标签页
2020/11/16 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
使用Python对Csv文件操作实例代码
2017/05/12 Python
对Python3中的input函数详解
2018/04/22 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
J2EE中常用的名词进行解释
2015/11/09 面试题
信息系统专业个人求职信范文
2013/12/07 职场文书
餐饮主管岗位职责
2013/12/10 职场文书
班干部演讲稿
2014/04/24 职场文书
推荐信格式范文
2014/05/09 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
初二学生评语大全
2014/12/26 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang
搭建Yolov5服务器
2022/04/30 Servers