php缓存技术

 更新时间:2016年11月25日 16:09  点击:1864

一、引论

PHP, 一门最近几年兴起的web设计脚本语言,由于它的强大和可伸缩性,近几年来得到长足的发展,php相比传统的asp网站,在速度上有绝对的优势,想 mssql转6万条数据php如需要40秒,asp不下2分钟.但是,由于网站的数据越来越多,我们渴求能更快速的调用数据,不必要每次都从数据库掉,我们可以从其他的地方,比方一个文件,或者某个内存地址,这就是php的缓存技术,也就是Cache技术.

二、分析深入

一般来说,缓存的目的是把数据放在一个地方让访问的更快点,毫无疑问,内存是最快的,但是,几百M的数据能往内存放么?这不现实,当然,有的时候临时放如服务器缓存,如ob_start()这个缓存页面开启的话在发送文件头之前页面内容都被缓存在内存中,知道等页面输出自动清楚或者等待 ob_get_contents的返回,或者被ob_end_clean显示的清除,这在静态页面的生成中能很好的利用,在模板中能得到很好的体现,这是一种方式,但这是临时性的,不是解决我们问题的好方法.

另外,在asp中有一对象application,可以保存公用的参数,这也算点缓存,但在php,我至今没看到开发者产出这种对象,的确,没必要.asp.net的页面缓存技术就用的是viewstate,而cache就是文件关联,(不一定准确),文件被修改,更新缓存,文件没被修改而且不超时(注释1),就读取缓存,返回结果,就是这个思路,看看这个源码:


PHP:
warn(''缓存文件不存在而且不能创建,需要手动创建.'');
  return false;
  }
}
$this->cache_dir = $cache_dirname;
}
function __destruct(){
echo ''Cache class bye.'';
}

function get_url() {
        if (!isset($_SERVER[''REQUEST_URI''])) {
                $url = $_SERVER[''REQUEST_URI''];
        }else{
                $url = $_SERVER[''scrīpt_NAME''];
                $url .= (!empty($_SERVER[''QUERY_STRING''])) ? ''?'' . $_SERVER[''QUERY_STRING''] : '''';
        }

        return $url;
}

function warn($errorstring){
echo "发生错误:

".$errorstring."

";
}

function cache_page($pageurl,$pagedata){
if(!$fso=fopen($pageurl,''w'')){
  $this->warns(''无法打开缓存文件.'');//trigger_error
  return false;
}
if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型锁定
  $this->warns(''无法锁定缓存文件.'');//trigger_error
  return false;
}
if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式
  $this->warns(''无法写入缓存文件.'');//trigger_error
  return false;
}
flock($fso,LOCK_UN);//释放锁定
fclose($fso);
return true;
}




《1》先安装MYSQL
运行MYSQL——5.20xxxxxx-win32.msi安装文件
1 next
2 选custom(自定义安装)
3点CHANGE 安装在D盘MYSQLMYSQL SERVER5.2目录下
4 NEXT
5 INSTALL
6 SKIP SIGN-UP                 NEXT
7 FINISH
8 NEXT
9 DETAILED CONFIGURATION       NEXT
10 DEVELOPER MACHINE           next
11 multfunctional database     next
12 会询问你数据库文件保存在哪个路径位置下  选择 确保在D盘下的MYSQL Datafiles中   next
13 DECISION SUPPORT(DSS)      NEXT
14 默认是3306 不是的话 改为3306  2个ENABLE选项都选上(如果发现移植过来的SQL应用程序有错误,则再次运行向导 把ENABLE STRICT MODE的选项取消
15 STANDED CHARACTER SET   选择LATIN -1字符集   NEXT
16 2个选项都选上  并且确认  SERVER NAME是  :MYSQL
17 MODIFY SECURTITY SETTINGS  下面的2个框添密码   自己设定(要牢记)
18 点击 execute
19 finish
20 在开始里面 选择 MYSQL 里面的MYSQL COMMAND LINE CLIENT
21 提示输入密码 连接成功后 表示安装成功   EXIT命令 退出

 

《2》安装apache 2 web 服务器
1 运行 apache_2.24-win32-x86-no_ssl.msi
2 NEXT
3 I ACCEPT
4 NEXT
5 第一个 user.com
第二个 web.user.com
第三个 webmaster@user.com
FOR ALL USER
NEXT
6 typical    next
7 默认目录   next
8 install
9 finish
10 安装完成 打开浏览器 输入http://localhost 回车  看页面上是否是  IT Works
  如果是 表示 APACHE WEB安装成功

 


《3》安装PHP5
1 运行PHP-5.2.1-WIN32.ZIP 解压到C:php目录下
2 将C:PHP目录下的php.ini-recommend文件名改为php.ini 复制到c:windows目录下
3 打开c:windowsphp.ini 文件  找到521行左右 或者用查找找到下面的代码参数
  extension_dir ="./"
修改为  extension_dir = "c:phpext"
4 为了与MYSQL数据库建立驱动连接  需要将c:php目录中的 libmysql.dll复制到c:windowssystem32
或者是c:winntsystem32目录中
5 在apache的安装目录中的CONF文件下  找到  Httpd.conf
 用文本编辑器打开
找到 #loadmodule ssl_module modules/mod_ssl_so
在下面加一行代码  没有#号
loadmodule php5_module "c:phpphp5apache2_2.dll"
6 找到addtype application/x-gizp.gz.tgz
在下面加一行代码
addtype application/x-httpd-
<

<?php
/*
 * PHP简单日历实例
 * 作者: 多菜鸟
 * 邮箱: kingerq AT msn DOT com
 * 来源: http://blog.111cn.net/kingerq/
 * 创建时间: 2008-01-03
**/

$date = preg_match("/d{4}-d{2}-d{2}/", $_GET["YMD"]) ? $_GET["YMD"] : date( "Y-m-d" );
$thisYear = date( "Y", strtotime( $date) );
$thisMonth = date( "m", strtotime( $date) );
$firstDay = date( "w", strtotime( $thisYear."-".$thisMonth."-01" ) );
$monthNum = date( "t", strtotime( $date) );
?>
<html>
<head>
<title>Calendar</title>
<style type="text/css">
.datehead td{
  background-color: #669966;
  border: 1px solid #4F774F;
  color:#FFFFFF;
  height:30px;
  font-size:18px;
  font-weight:bold;
  text-align:center;
  font-family: Geneva, Arial, Helvetica, sans-serif;
}
.daynormalbg td{
 background-color:#EEEEEE;
 border:solid #dddddd 1px;
 height:100px;
 vertical-align: top;
 width:14%;
}
.daynormalfont div{
 color:#000000;
 font-weight:bold;
 font-size:18px;
 font-family: Geneva, Arial, Helvetica, sans-serif;
}
.sunday{color:#CC0000 !important; }
.saturday{color: #006600 !important;}
.todaybg{
 background-color:#0099FF !important;
 text-decoration: underline;
}
a {font-family:Geneva, Arial, Helvetica, sans-serif; color:#333333; font-size:12px}
a:hover{text-decoration:none;}
</style>
</head>

<body>
<table border="0" align="center" cellpadding="5" cellspacing="0">
  <tr>
    <td>     
 <p><a href="?YMD=<?=date( "Y-m", strtotime( $date." -1 year") )."-01"?>">&lt;&lt;Last Year</a>
        <a href="?YMD=<?=date( "Y-m",




刚才 看了一个视频教程

发现台湾同胞:

把“程序”叫“程式”

把“变量”叫“变数”

把“数据库”叫“资料库”

如果你看到台湾的书籍的时候帮助理解~
 

<


许多开发者很疑惑为什么 FleaPHP 以高效开发为目标,却没有提供 Active Record 模式。本文尝试详细阐述这个问题。
Active Record 是什么?

  Active Record 模式中文名为“活动记录”,在《企业应用架构模式》(PoEAA)一书中定义如下:

    活动记录(Active Record):一个对象,它包装数据库表或视图中的某一行,封装数据库访问,并在这些数据上增加了领域逻辑。

  举个例子来说,一个图书数据表,每一条记录就是一本图书的信息。那么采用 Active Record 时,每一本图书就是一个 Active Record 对象实例。
Active Record 因 Ruby On Rails 而流行

  Active Record 之所以现在这么炙手可热,甚至许多人将 Active Record 和 ORM 划等号,完全是 Ruby On Rails 的原因。

在 Ruby On Rails 中,Active Record 除了最基本的将数据记录和一个对象互相映射外,还提供了数据(而不是对象)间关联关系的处理。例如:

  一本图书有一个或者多个作者,所以每一个图书对象都和多个作者对象关联。反过来一个作者可以写多本书,所以一个作者对象也和多个图书对象关联。

  在 RoR 中,我们获取一个图书对象时,自动就获得了该图书对象所对应的作者对象(本质上是图书数据对应的作者数据)。更进一步,通过图书对象关联的作者对象,我们 可以获取该作者所写的所有图书的对象实例。而这些工作,在 RoR 中只需要几行代码而已,以前我们需要写上一大段代码才能实现同样的效果。

  RoR 中,对 Active Record 模式的实现完全利用了 Ruby 语言的灵活性,简短几行代码就可以定义一个关联。并且通过复杂的 ActiveRecord:Base 对象,提供了 CRUD(创建、读取、更新、删除)操作的默认处理。所以使用 RoR 时,绝大部分常见的数据库操作只需要很少量的代码就可以完成,大大提高了开发效率。

  但 Active Record 模式也不是完美的,Active Record 存在不少缺点。

    * Active Record 模式需要数据表结构和对象属性一一对应(至少是大部分对应),否则将难以使用 Active Record 模式;
    * Active Record 模式并不能够真正适合完全面向对象的应用程序。因为 Active Record 模式本质上就要求一个对象必须和一个数据表对应。但在完全面向对象的应用程序中,数据和操作数据的方法很可能分布在各个不同的对象中,这些对象却并没有和 某一个数据表完全对应,而且 Active Record 无法很好的处理对象的继承、聚合等面向对象常见的对象间关系;
    * 随着逐渐向 Active Record 添加业务逻辑,Active Record 对象中会混入越来越多的 SQL 语句,这在更复杂的项目中显然是一个不利因素。

  如果在 Active Record 模式中添加了对数据关系(注意,不是对象关系)的处理,那么还要注意性能问题:
  假如一个 Active Record 对象有多个关联。那么我取出一个对象时,很可能就连带取出了其他不少对象。但这些对象可能根本就是本次操作用不上的。其次,将对象更新到数据库时,也需要对关联的对象进行处理,否则对关联对象的修改就会丢失。

  虽然可以用各种技巧来避免这些情况,但毫无疑问需要开发者对 RoR 的 Active Record 很熟悉才行。否则看上去很简单的代码,背后则会是噩梦般的数据库操作。

  其次,假设我们要将数据库中每本书的单价减半,那么采用 Active Record 模式时,就必须首先读取所有的记录并实例化为对象,然后更新对象属性,再写回数据库。可想而知这样会有多差的效率。
  当然了,实际开发中没有人会这样做。开发者会编写一个单独的方法,用一条 SQL 语句完成对批量数据的更新。但也说明 Active Record 模式不适合批量处理数据,而现实世界中,批量处理数据的需求随处可见。

  不过由于 RoR 对开发效率戏剧性的提高,所以对于追求开发效率的项目,RoR 是一个很不错的选择。而且性能上的不足可以通过更新硬件或者配合其他技术手段来改善(例如 FastCGI 通常是运行 RoR 应用的首选)。因此在现实世界中,37signals.com 公司的所有基于 RoR 开发的应用,都获得了良好的性能表现(但是同等的硬件,跑 PHP 开发的同样功能应用是更好还是更差呢?这个问题没有答案)。
Active Record 与 ORM

  许多人将 Active Record 与 ORM 划等号,这是错误的。
[!--infotagslink--]

相关文章

  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • IDEA中的clean,清除项目缓存图文教程

    这篇文章主要介绍了IDEA中的clean,清除项目缓存图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-25
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • AngularJS实现Model缓存的方式

    这篇文章主要介绍了AngularJS实现Model缓存的方式,分享了多种AngularJS实现Model缓存的方法,感兴趣的小伙伴们可以参考一下...2016-02-05
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • iOS蓝牙设备名称缓存问题的解决方法

    这篇文章主要给大家介绍了关于iOS蓝牙设备名称缓存问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • Nodejs下DNS缓存问题浅析

    本文给大家一起探讨nodejs下dns的缓存问题,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧...2016-11-22
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • @CacheEvict + redis实现批量删除缓存

    这篇文章主要介绍了@CacheEvict + redis实现批量删除缓存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-12
  • vue项目中禁用浏览器缓存配置案例

    这篇文章主要介绍了vue项目中禁用浏览器缓存配置案例,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-09-12
  • python怎么删除缓存文件

    在本篇文章里小编给大家整理的是一篇关于python删除缓存文件方法,需要的朋友们可以学习下。...2020-07-19
  • IIS7、iis7.5中禁止缓存单个静态文件的配置方法

    这篇文章主要介绍了IIS7、iis7.5中禁止缓存单个静态文件的配置方法,需要的朋友可以参考下...2017-07-06
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29