WEB程序获取信息的方式主要是查询数据库,当数据库不是很大的情况下不会有太大的问题.然而,随着网站的发展,数据库呈几何级数的方式增长的时候,就会出现瓶颈.于是PHP缓存技术诞生了。
PHP
PHP缓存技术
.PHP缓存技术工作时,当程序查询数据的时候,会把相应的结果序列化后保存到文件中,以后同样的查询语句就可以不用直接查询数据库,而是从缓存文件中获得。这一改进使得程序运行速度得以大幅度提升.
目前应用PHP缓存技术比较流行的方法主要是Adodb+Smarty这样的黄金搭档.
PHP缓存技术工作原理:
首先看看adodb提供的数据缓存功能:
1<?php
2include('adodb.inc.php'); # load code common to ADOdb
3$ADODB_CACHE_DIR = '/usr/ADODB_cache';
4$conn = &ADONewConnection('mysql'); # create a connection
5$conn->PConnect(' ','userid','','agora');# connect to MySQL, agora db
6$sql = 'select CustomerName, CustomerID from customers';
7$rs = $conn->CacheExecute(15,$sql);
8?> 如上,每次查询数据的时候,会把相应的结果序列化后保存到文件中,以后同样的查询语句就可以不用直接查询数据库,而是从缓存文件中获得。
再来看看Smarty提供的页面缓存功能:
1<?php
2require('Smarty.class.php');
3$smarty = new Smarty;
4$smarty->caching = true;
5if(!$smarty->is_cached('index.tpl')) {
6 // No cache available, do variable assignments here.
7 $contents = get_database_contents();
8 $smarty->assign($contents);
9}
10$smarty->display('index.tpl');
11?>
12
如上,每次访问页面的时候,都会先检测相应的缓存是否存在,如果不存在,就连接数据库,得到数据,完成模板变量的赋值,显示页面,同时生成缓存文件,这样下次访问的时候缓存文件就发挥作用了,而不会再执行if块的数据查询语句了。当然,在实际使用中会有很多东西要考虑,比如,有效期的设置,缓存组的设置等等,具体可以查看Smarty手册中有关缓存(caching)的相关章节。
以上两个PHP流行组件缓存方式的侧重点是不同的,对于Adodb的缓存而言,它缓存的是数据,对于Smarty的缓存而言,它缓存的是页面。其他提供缓存功能的组件还有很多(如:PEAR::Cache_Lite等等),实际编程中使用哪个方案要具体情况具体分析,也可能会综合使用。
使用这些组件内置的缓存方案有一个很明显的好处是它们的实现对客户端而言都很透明。只要进行必要的设置(如:缓存时间,缓存目录等等)就可以了,而不用过多考虑实现缓存的细节问题,系统会根据设置自动管理缓存。但是其缺点也同样明显,因为每次请求仍然要用PHP解析一遍,效率和纯静态相比还是大打折扣,在大的PV面前还是不能满足要求,在这种情况下,仅仅做动态缓存就不够了,必须实现静态缓存。
PHP,一门最近几年兴起的web设计脚本语言,由于它的强大和可伸缩性,近几年来得到长足的发展,php相比传统的asp网站,在速度上有绝对的优势,想mssql转6万条数据php如需要40秒,asp不下2分钟.但是,由于网站的数据越来越多,我们渴求能更快速的调用数据,不必要每次都从数据库调,我们可以从其他的地方,比方一个文件,或者某个内存地址,这就是php的缓存技术,也就是Cache技术.Publish Comment发表评论
点击图片可刷新验证码
Comment网友评论
- linux下批量替换文件内容
- 联合索引的最左前缀匹配原则
- Laravel 服务容器实例教程 ——
- select、poll、epoll之间的
- 对称加密与非对称加密,以及RSA的原理
- nginx fastcgi php-fp
- Yii2缓存机制 - 缓存依赖
- MySQL四种事务隔离级别详解
- 常见web漏洞及防范
- C++语言垃圾回收机制探究
- PHP的垃圾回收机制以及大概实现原理
- PHP程序中使用gc_enable()
- PHP弱类型变量原理深入探究
- 从5.6升级到5.7后master上插入
- Mysql的锁机制
- Py之scikit-learn:机器学习
- 索引优化
- Win10 Anaconda下Tenso
- mysql-to-postgresql
- 世界最大的PHP站点 Facebook后
- springBoot的数据库操作
- php7 vs java8 vs no
- 慎用 “微服务” 架构
- Laravel 如何设计微服务架构,及如
- PostgreSQL与MySQL对比
- PHP框架比较(phalcon,yaf,
- TDD和BDD及DDD的解说
- Thrift 的原理和使用
- Apache Thrift简介
- PHP7在性能上的飞跃
- 2017年的golang、python、
- Nginx报 No input file
- 未来简史
- Linux下php加装mssql模块
- chrome发起跨域ajax请求报错问题
- linux下防止arp攻击
- 配置Apache或nginx开启gzip
- Linux VPS服务器根据CPU负载及
- Linux 系统 fail2ban 的安
- 在eclipse中将android工程打
- Android开发环境搭建(jdk+ec
- PHP中的面向对象和面向过程
- Linux文件实时同步的实现
- PHPExcel用法总结
- 手动释放linux内存cache
- 正确删除MySQL log bin 日志
- How to set up mysql
- 深入理解JavaScript闭包(clo
- 企业级web负载均衡完美架构
- 数据库是否使用外键,及视图,索引,存储过
-
13-10-17 15:39 兄弟,真有才。。。。
-
13-05-31 21:07 最近怎么样?
-
11-03-17 20:05 才华横溢!!!
-
10-12-07 21:28 在下在je上看见你的帖子,特意过来看看,姓詹的很少啊..
-
10-11-01 13:34 怎么不把爱易婚嫁网放进来啊
-
10-10-21 15:48 呵呵什么时候做的啊