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中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
PHP静态成员变量和非静态成员变量详解
Feb 14 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
详细解读php的命名空间(一)
Feb 21 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
杏林同学录(四)
2006/10/09 PHP
PHP新手上路(十二)
2006/10/09 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
python英语单词测试小程序代码实例
2019/09/09 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
11月升旗仪式讲话稿
2014/02/15 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
老干部工作先进事迹
2014/08/17 职场文书
水电工岗位职责
2015/02/14 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android