扣丁学堂浅谈php缓存技术及php缓存实现代码详解

2017-12-12 14:31:43 679浏览

在现如今,随着互联网时代信息日夜更新,比如有些信息经常不变的,但是还是能变的信息放在缓存中以加快显示速度,这是很有价值的,所谓的缓存,通俗的理解就是一些保存在服务器端的共用信息.它是于服务器同生死的,我们在保存缓存的时候可以指定下次更新的时间的判断,比方要在5分钟更新一次,那么下面我们一起来看下扣丁学堂PHP视频教程之PHP缓存实现代码的详细介绍吧。


扣丁学堂浅谈php缓存技术及php缓存实现代码详解


数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。

用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。

举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。

页面缓存:每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些PHP缓存机制类通常有此功能)

时间触发缓存:检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

内容触发缓存:当插入数据或更新数据时,强制更新PHP缓存机制。

静态缓存:这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。

内存缓存:Memcached是高性能的,分布式的内存对象PHP缓存机制系统,用于在动态应用中减少数据库负载,提升访问速度。

php的缓冲器:有eaccelerator,apc,phpa,xcache,这个这个就不说了吧,搜索一堆一堆的,自己看啦,知道有这玩意就OK

MYSQL缓存:这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的

我贴段根据蓝色那家伙修改后部分my.ini吧,2G的MYISAM表可以在0.05S左右,据说他前后改了有快一年

基于反向代理的Web缓存:如Nginx,SQUID,mod_proxy(apache2以上又分为mod_proxy和mod_cache)

NGINX的例子

用google找到一些php缓存技术方法,发个PHP缓存实现,实现了apc和文件缓存,继承Cache_Abstract即可实现调用第三方的缓存工具。

isLocked($key)){

return$this;

}

$tries=10;

$count=0;

do{

usleep(200);

$count++;

}while($count<=$tries&&$this->isLocked($key));//最多做十次睡眠等待解锁,超时则跳过并解锁

$this->isLocked($key)&&$this->unlock($key);

return$this;

}

}

/**

*APC扩展缓存实现

*

*

*@categoryMjie

*@packageCache

*@author流水孟春

*@copyrightCopyright(c)2008-

*@licenseNewBSDLicense

*@version$Id:Cache/Apc.php版本号2010-04-1823:02cmpan$

*/

classCache_ApcextendsCache_Abstract{

protected$_prefix='cache.mjie.net';

publicfunction__construct(){

if(!function_exists('apc_cache_info')){

thrownewCacheException('apcextensiondidn'tinstalled');

}

}

/**

*保存缓存变量

*

*@paramstring$key

*@parammixed$value

*@returnbool

*/

publicfunctionstore($key,$value){

returnapc_store($this->_storageKey($key),$value);

}

/**

*读取缓存

*

*@paramstring$key

*@returnmixed

*/

publicfunctionfetch($key){

returnapc_fetch($this->_storageKey($key));

}

/**

*清除缓存

*

*@returnCache_Apc

*/

publicfunctionclear(){

apc_clear_cache();

return$this;

}

/**

*删除缓存单元

*

*@returnCache_Apc

*/

publicfunctiondelete($key){

apc_delete($this->_storageKey($key));

return$this;

}

/**

*缓存单元是否被锁定

*

*@paramstring$key

*@returnbool

*/

publicfunctionisLocked($key){

if((apc_fetch($this->_storageKey($key).'.lock'))===false){

returnfalse;

}

returntrue;

}

/**

*锁定缓存单元

*

*@paramstring$key

*@returnCache_Apc

*/

publicfunctionlock($key){

apc_store($this->_storageKey($key).'.lock','',5);

return$this;

}

/**

*缓存单元解锁

*

*@paramstring$key

*@returnCache_Apc

*/

publicfunctionunlock($key){

apc_delete($this->_storageKey($key).'.lock');

return$this;

}

/**

*完整缓存名

*

*@paramstring$key

*@returnstring

*/

privatefunction_storageKey($key){

return$this->_prefix.'_'.$key;

}

}

/**

*文件缓存实现

*

*

*@categoryMjie

*@packageCache

*@author流水孟春

*@copyrightCopyright(c)2008-

*@licenseNewBSDLicense

*@version$Id:Cache/File.php版本号2010-04-1816:46cmpan$

*/

classCache_FileextendsCache_Abstract{

public$useSubdir=false;

protected$_cachesDir='cache';

publicfunction__construct(){

if(defined('DATA_DIR')){

$this->_setCacheDir(DATA_DIR.'/cache');

}

}

/**

*获取缓存文件

*

*@paramstring$key

*@returnstring

*/

protectedfunction_getCacheFile($key){

$subdir=$this->useSubdir?substr($key,0,2).'/':'';

return$this->_cachesDir.'/'.$subdir.$key.'.php';

}

/**

*读取缓存变量

*为防止信息泄露,缓存文件格式为php文件,并以""开头

*

*@paramstring$key缓存下标

*@returnmixed

*/

publicfunctionfetch($key){

$cacheFile=self::_getCacheFile($key);

if(file_exists($cacheFile)&&is_readable($cacheFile)){

//include方式

//returninclude$cacheFile;

//系列化方式

returnunserialize(@file_get_contents($cacheFile,false,NULL,13));

}

returnfalse;

}

/**

*缓存变量

*为防止信息泄露,缓存文件格式为php文件,并以""开头

*

*@paramstring$key缓存变量下标

*@paramstring$value缓存变量的值

*@returnbool

*/

publicfunctionstore($key,$value){

$cacheFile=self::_getCacheFile($key);

$cacheDir=dirname($cacheFile);

if(!is_dir($cacheDir)){

if(!@mkdir($cacheDir,0755,true)){

thrownewCacheException("Couldnotmakecachedirectory");

}

}

//用include方式

//return@file_put_contents($cacheFile,''.serialize($value));

}

/**

*删除缓存变量

*

*@paramstring$key缓存下标

*@returnCache_File

*/

publicfunctiondelete($key){

if(emptyempty($key)){

thrownewCacheException("Missingargument1forCache_File::delete()");

}

$cacheFile=self::_getCacheFile($key);

if(!@unlink($cacheFile)){

thrownewCacheException("Cachefilecouldnotbedeleted");

}

return$this;

}

/**

*缓存单元是否已经锁定

*

*@paramstring$key

*@returnbool

*/

publicfunctionisLocked($key){

$cacheFile=self::_getCacheFile($key);

clearstatcache();

returnfile_exists($cacheFile.'.lock');

}

/**

*锁定

*

*@paramstring$key

*@returnCache_File

*/

publicfunctionlock($key){

$cacheFile=self::_getCacheFile($key);

$cacheDir=dirname($cacheFile);

if(!is_dir($cacheDir)){

if(!@mkdir($cacheDir,0755,true)){

if(!is_dir($cacheDir)){

thrownewCacheException("Couldnotmakecachedirectory");

}

}

}

//设定缓存锁文件的访问和修改时间

@touch($cacheFile.'.lock');

return$this;

}

/**

*解锁

*

*@paramstring$key

*@returnCache_File

*/

publicfunctionunlock($key){

$cacheFile=self::_getCacheFile($key);

@unlink($cacheFile.'.lock');

return

以上就是关于php缓存技术及php缓存实现代码的详细介绍,最后想要学习PHP开发技术的小伙伴不要犹豫了,扣丁学堂是PHP培训技术的最佳选择,想要PHP视频教程的小伙伴现在就联系我们的咨询老师领取吧,机会总是留给有准备的人的!扣丁学堂PHP开关工程师技术交流群:374332265。





【关注微信公众号免费领取丁豆获取更多的学习资料】



查看更多关于“php培训资讯的相关文章>>


标签: PHP开发工程师 PHP培训 PHP视频教程 PHP在线视频 php缓存技术

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号