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下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
php json转换成数组形式代码分享
Nov 10 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
PHP中Array相关函数简介
Jul 03 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
php版微信小店调用api示例代码
Nov 12 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
php实现解析xml并生成sql语句的方法
Feb 03 PHP
PHP实现爬虫爬取图片代码实例
Mar 03 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
phpmyadmin的#1251问题
2006/11/25 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
Javascript闭包用法实例分析
2015/01/23 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
jQuery读取XML文件的方法示例
2017/02/03 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
C语言编程练习
2012/04/02 面试题
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
大学生个人事迹材料
2014/01/21 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
工程技术员岗位职责
2014/03/02 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
岗位职责怎么写
2014/03/14 职场文书
环保公益策划方案
2014/08/15 职场文书
质量整改通知单
2015/04/21 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
基于Python实现nc批量转tif格式
2022/08/14 Python