fpcTest.php
這里是用的是github,連接到我本人的git博客上面.如果連接github有問題,可以看本文最后給的完整代碼.
測(cè)試
我們?cè)谶@里測(cè)試,第一次加載因?yàn)樾枰x取對(duì)應(yīng)的m_ahout的信息,所以慢一點(diǎn)
第二次加載因?yàn)閺膔edislimian 讀取了,所以會(huì)快的多
使用建議
代碼我認(rèn)為已經(jīng)給了足夠多的接口了,在第一次緩存的時(shí)候使用remember函數(shù)記錄緩存,之后如果緩存變化后使用refresh函數(shù),更新緩存即可.如果可能的話,盡量使用ttl設(shè)置緩存的過期時(shí)間.
完整代碼
redisFPC.php
<?php
namespace RedisFPC;
class RedisFPC
{
/**
* php redis的訪問類
* @var unknown
*/
private $redis;
/**
* 構(gòu)造函數(shù)
* @param array $redis 使用phpredis的類
* @param 是否連接成功
*/
public function __construct($redis = [])
{
//$this->redis = $redis;
$this->redis = new \\\\Redis();
return $this->redis->connect('127.0.0.1');
}
/**
* 記錄對(duì)應(yīng)的緩存,如果之前存在則返回原本的緩存
* @param string $cacheName 緩存名
* @param string | callback $urlOrCallback 需要緩存的數(shù)據(jù)地址.可以是一個(gè) 網(wǎng)頁地址也一個(gè)可回調(diào)類型,如果不是可回調(diào)類型,則判定是一個(gè)網(wǎng)址
* @param null | int $ttl 緩存過期時(shí)間,如果不過期就是用默認(rèn)值null
* @throws \\\\Exception 如果無法訪問地址
* @return boolean|string 緩存成功返回獲取到的頁面地址
*/
public function remember($cacheName, $urlOrCallback, $ttl = null)
{
$value = $this->get($cacheName);//檢查緩存是否存在
if (!$value) {
//之前沒有使用鍵
if (is_callable($urlOrCallback)) {
$text = $urlOrCallback();
} else {
//如果不是回調(diào)類型,則嘗試讀取網(wǎng)址
$text = $this->getUrlText($urlOrCallback);
}
if (empty($text)) {
throw new \\\\Exception('can not get value:' . $urlOrCallback);
}
$this->put($cacheName, $text, $ttl);
return $text;
} else {
return $value;
}
}
/**
* 獲取對(duì)應(yīng)的緩存值
* @param string $cacheName 緩存名
* @return String | Bool,如果不存在返回false,否則返回對(duì)應(yīng)的緩存頁信息
*/
public function get($cacheName)
{
return $this->redis->get($this->getKey($cacheName));
}
/**
* 將對(duì)應(yīng)的全頁緩存保存到對(duì)應(yīng)redis中
* @param string $cacheName 緩存名
* @param string $value
* @param null | int $ttl 過期時(shí)間,如果不過期就是用默認(rèn)值null
* @return boolean 保存成功返回true
*/
public function put($cacheName, $value, $ttl = null)
{
if (is_null($ttl)) {
return $this->redis->set($this->getKey($cacheName), $value);
} else {
return $this->redis->set($this->getKey($cacheName), $value, $ttl);
}
}
/**
* 刪除對(duì)應(yīng)緩存
* @param string $cacheName 緩存名
*/
public function delete($cacheName)
{
return $this->redis->delete($this->getKey($cacheName));
}
/**
* 更新緩存,并返回當(dāng)前的緩存
* @param string $cacheName 緩存名
* @param string | callback $urlOrCallback 需要緩存的數(shù)據(jù)地址.可以是一個(gè) 網(wǎng)頁地址也一個(gè)可回調(diào)類型,如果不是可回調(diào)類型,則判定是一個(gè)網(wǎng)址
* @param null | int $ttl 過期時(shí)間,如果不過期就是用默認(rèn)值null
* @return boolean|string 緩存成功返回獲取到的頁面地址
*/
public function refresh($cacheName, $urlOrCallback, $ttl = null)
{
$this->delete($cacheName);
return $this->remember($cacheName, $urlOrCallback, $ttl);
}
/**
* 獲取對(duì)應(yīng)的url的信息
* @param string $url 對(duì)應(yīng)的地址
* @return boolean|string
*/
public function getUrlText($url)
{
if (empty($url)) {
return false;
}
return file_get_contents($url);
}
/**
* 生成全頁緩存鍵名
* @param string $cacheName 需要緩存的名稱
* @return string 對(duì)應(yīng)的在redis中的鍵名
*/
private function getKey($cacheName)
{
return 'FPC:'. $cacheName;
}
}
測(cè)試用的test代碼
注意這里的url寫的是本地的緩存url
<?php
use RedisFPC\\\\RedisFPC;
require_once 'redisFPC.php';
/* $text = file_get_contents('http://localhost:1002/m_about.php');
var_dump($text); */
$url = 'http://localhost:1002/m_about.php';
$fpc = new RedisFPC();
echo $fpc->remember('服務(wù)協(xié)議', $url, 60*60*24);
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問題,請(qǐng)?jiān)L問西部數(shù)碼官網(wǎng):m.ps-sw.cn