日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...

發(fā)布時(shí)間:2025/3/20 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從數(shù)據(jù)庫中直接讀取數(shù)據(jù),雖然時(shí)效性很強(qiáng),但是對數(shù)據(jù)庫造成很大壓力,尤其是在高訪問量的情況下。這時(shí)候可以通過緩存,來有效的緩解了這一壓力,雖然時(shí)效性有些不足,但是服務(wù)器的抗壓能力卻達(dá)到了很大的提高。

讀取緩存方式的中心思想:

當(dāng)請求進(jìn)來時(shí),先查看是否有緩存,如果有并且緩存還在有效時(shí)間內(nèi),不再查詢數(shù)據(jù)庫,直接返回緩存即可;如果沒有或者已經(jīng)過了有效時(shí)間,查詢數(shù)據(jù)庫,返回?cái)?shù)據(jù),同時(shí)生成一份新的緩存,供以后使用。

代碼案例,還是在前幾天的代碼基礎(chǔ)上進(jìn)行改造完善。

做了一些修改,將原來cacheData()方法中的第三個(gè)參數(shù),由path修改成了cacheTime,用來記錄緩存的有效時(shí)間。在方法中增加了,寫入緩存時(shí)間的邏輯,和判斷緩存文件是否過期的邏輯,如下:

/********************************

*

*???修改File類,cacheData方法中加入了緩存時(shí)間參數(shù)

*???學(xué)php的小螞蟻

*???原創(chuàng)博客?http://my.oschina.net/woshixiaomayi/blog

*

***************************/

class?File{

//緩存文件的路徑

private?$_dir;

//緩存文件的默認(rèn)路徑

const?EXT='.txt';

//構(gòu)造方法生成目錄

function?__construct(){

$this->_dir??=???dirname(__FILE__).'/files/';

if(!is_dir($this->_dir)){

mkdir($this->_dir,0777);

}

}

/*************************

*

*???緩存文件的生成,修改,刪除,第三個(gè)參數(shù)改成了緩存時(shí)間

*???$value有值,寫入。無值,讀出。為null,刪除

*???@param??????string????????$key???文件名

*???@param??????mixed?????$value?????緩存的數(shù)據(jù)

*???@param??????int????????$cacheTime??緩存文件的有效時(shí)間

*???return??????mixed????????返回值為布爾值,字符串,整型

*

*******************/

public?function?cacheData($key,$value='',$cacheTime=0){

//緩存文件的全路徑

$filename???=???$this->_dir.$key.self::EXT;

//如果value為null,這刪除這個(gè)靜態(tài)緩存

if(is_null($value)){

return?@unlink($filename);

}

//如果$value不等于空,說明是寫入操作

if($value?!=?''){

//判斷提交的path是否存在

$dir???=???dirname($filename);

if(!is_dir($dir)){

mkdir($dir,0777);

}

/*

在進(jìn)行寫入操作的時(shí)候,附帶上緩存有效時(shí)間

有效時(shí)間為11位的整形,不足11位在前端用0補(bǔ)足

這樣做方便截取

*/

$cacheTime=sprintf('%011d',$cacheTime);

//將緩存有效時(shí)間拼接數(shù)據(jù)json,保存到文件

return?file_put_contents($filename,$cacheTime.json_encode($value));

}elseif($value?==?''){????//說明是讀取操作

if(is_file($filename)){

/*

因?yàn)榧尤肓司彺鏁r(shí)間,需要將它們拆分開來,進(jìn)行判斷,

緩存是否過期,如果沒有過期,返回?cái)?shù)據(jù),如果過期了,

刪除源文件,返回false。

*/

$content=file_get_contents($filename);

//拿到本文件的緩存有限時(shí)間

$time=(int)substr($content,0,11);

/*

進(jìn)行判斷緩存是否可用

1.判斷過期時(shí)間是不是永久緩存(為0則是永久緩存)

2.緩存時(shí)間加上文件修改時(shí)間是否小于現(xiàn)在時(shí)間,如果小于

則已經(jīng)過期

*/

if($time?!=?0?&&?($time?+?filemtime($filename)?

//緩存文件不可用,刪除該文件,返回false

unlink($filename);

return?false;

}

//緩存數(shù)據(jù)可用,拿出數(shù)據(jù),直接返回

$value=substr($content,11);

return?json_decode($value,true);

}else{

return?false;

}

}

}

}

?>

邏輯代碼中,需要作出判斷,是否存在緩存文件。有并且沒有過期,則使用緩存文件,不再讀取數(shù)據(jù)庫,沒有或者已經(jīng)過期,則走查詢數(shù)據(jù)庫的步驟,同時(shí)生成緩存文件。代碼中的echo 123,是測試使用,注釋已經(jīng)做出了說明。

/***********************************

*

*讀取數(shù)據(jù)庫的方式開發(fā)首頁接口

*學(xué)php的小螞蟻

*博客?http://my.oschina.net/woshixiaomayi/blog

*

************************************/

//載入前天寫的db類

//代碼內(nèi)容請參考?http://my.oschina.net/woshixiaomayi/blog/518295

require_once('./db.php');

//載入之前寫好的接口響應(yīng)類

//代碼內(nèi)容請參考?http://my.oschina.net/woshixiaomayi/blog/517384

require_once('./response.php');

//載入剛剛改造好的文件靜態(tài)緩存類

require_once('./file.php');

//接收分頁數(shù)據(jù)?page?為當(dāng)前第幾頁??pagesize?一頁多少數(shù)據(jù)

$page=isset($_GET['page'])?$_GET['page']:1;

$pagesize=isset($_GET['pagesize'])?$_GET['pagesize']:5;

//檢測這兩個(gè)數(shù)值是否為數(shù)字

if(!is_numeric($page)?or?!is_numeric($pagesize)){

//不是數(shù)字,發(fā)送錯(cuò)誤提示

/*

這里之所以使用了一個(gè)return是加強(qiáng)了程序的可讀性,因?yàn)閷Τ绦虿皇煜さ某绦騿T,不知道

在show方法中有exit,加上一個(gè)return,其他人就會知道執(zhí)行到這一步之后,程序就會停止,

后面的程序就不會執(zhí)行了。方便了其他人,大家好才是真的好\(^o^)/YES!

*/

return?Response::show(400,'參數(shù)不合法');

}

//設(shè)置分頁所需要的偏移量

$offset=($page-1)*$pagesize;

//編寫sql語句

$sql="select?*?from?ecm_member?limit?".$offset.",".$pagesize;

//實(shí)例化文件緩存類,查看是否存在有效時(shí)間內(nèi)的緩存文件

$file=new?File();

if(!$index_data=$file->cacheData('list'.$page.'_'.$pagesize)){

/*

此處為調(diào)試,在第一次訪問的時(shí)候,echo?的123可以出現(xiàn),之后訪問,由于

已經(jīng)生成緩存,則不再走這一步,所以123不會出現(xiàn)。直到有效時(shí)間過去,才會

再次出現(xiàn)

*/

echo?123;

//如果連接數(shù)據(jù)庫的時(shí)候出錯(cuò),獲取信息,并將自定義的信息返回

//以免將錯(cuò)誤直接暴露給用戶

try{

$connect?=Db::getInstance()->connect();

}catch(Exception?$e){

//返回給APP的錯(cuò)誤提示

return?Response::show(400,'mysql?not?connect');

}

//數(shù)據(jù)庫連接成功,執(zhí)行sql語句,獲取結(jié)果集

$result=mysql_query($sql,$connect);

$index_data=array();

while($row=mysql_fetch_assoc($result)){

$index_data[]=$row;

}

$file->cacheData('list'.$page.'_'.$pagesize,$index_data,15);

}

if($index_data){

//所需的結(jié)果數(shù)據(jù)拿到,返回?cái)?shù)據(jù)

return?Response::show(200,'內(nèi)容獲取成功',$index_data);

}else{

//沒有拿到,返回錯(cuò)誤提示

return?Response::show(400,'首頁數(shù)據(jù)獲取失敗');

}

?>

讀取緩存方式開發(fā)接口的思想基本上就是這樣了,很好理解,不過這里用了一個(gè)最笨的方法,在本地保存文件的形式做了緩存,其實(shí)可以使用一些更高級的服務(wù),例如memcache、redis等進(jìn)行緩存,效率更高,有時(shí)間的話,使用這兩種服務(wù)再測試一下????~(~ ̄▽ ̄)~????加了個(gè)油。

總結(jié)

以上是生活随笔為你收集整理的php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。