首頁  >  文章  >  後端開發  >  Memcached PHP Memcached + APC + 檔案快取封裝實現程式碼

Memcached PHP Memcached + APC + 檔案快取封裝實現程式碼

WBOY
WBOY原創
2016-07-29 08:42:131092瀏覽

使用方法:
Memcached

複製程式碼程式碼如下:


$cache = new Cache_MemCache() addServer('www1');
$cache->addServer('www2',11211,20); // 該伺服器擁有雙倍的內存,並獲得雙倍的權重
$cache ->addServer('www3',11211);
// 在快取中儲存一些資料10 分鐘
$cache->store('my_key','foobar',600);
// 再次從快取取出
echo($cache->fetch('my_key'));

檔案快取

複製程式碼

複製程式碼




複製程式碼



複製程式碼



複製程式碼

程式碼如下:



$cache = new Cache_File() ;

$key = 'getUsers:selectAll'; // 檢查資料是否已不在快取if (!$data = $cache->fetch($key)) { // 假設存在資料庫連線 $result = mysql_query("從使用者中選擇*");

$data = array();

// 取得所有資料並將其放入陣列
while($row = mysql_fetch_assoc($result)) { $data[] = $row; }
// 將資料存入快取10分鐘
$cache->store($key,$data,600);
}


下載:class_cache3.php



複製程式碼

程式碼如下:


抽象類別Cache_Abstract {
抽象函式fetch($key);
抽象函數store ($key, $data, $ttl);
抽象函數delete($key);
}
class Cache_APC extends Cache_Abstract {
function fetch($key) {
return apc_fetch( $key);
}
函數儲存($key, $data, $ttl) {
return apc_store($key, $data, $ttl);
}
函數刪除( $key) {
return apc_delete($key);
}
}
class Cache_MemCache extends Cache_Abstract {
public $connection;
function __construct()
public $connection;
function __construct()
->connection = new MemCache;
}
function store($key, $data, $ttl) {
return $this->connection->set($key, $data, 0, $ttl );
}
function fetch($key) {
return $this->connection->get($key);
}
函數刪除($key) {
回傳$this->連線->delete($key);
}
function addServer($host, $port = 11211, $weight = 10) {
$this->connection->addServer( $host, $port, true, $weight);
}
}
class Cache_File extends Cache_Abstract {
function store($key, $data, $ttl) {
$h =function store($key, $data, $ttl) {
$h = fopen($this->getFileName($key) , 'a+');
if (!$h)
拋出新的​​例外('無法寫入快取');
flock($h , LOCK_EX);
fseek($h, 0);
ftruncate($h, 0);
$data = serialize(array(time() + $ttl, $data));
if (fwrite($h, $data) === false) {
拋出新的​​例外('無法寫入快取');
}
fclose($h);
}
function fetch($key) {
$filename = $this->getFileName($key);
if (!file_exists($filename))
回傳false;
$h = fopen($filename, 'r');
if (!$h)
回傳false;
flock($h, LOCK_SH);
$data = file_get_contents($filename);
fclose($h);
$data = @unserialize($data);
if (!$data) {
unlink($filename);
回傳錯誤;
}
if (time() > $data[0]) {
unlink($filename);
回傳錯誤;

}

回傳$data[1];

}

函數刪除($key) {

$filename = $this->getFileName($key); if (file_exists($filename)) { return unlink($filename); } else { 返回false; } } 私有函數getFileName($key) { 返回'/tmp/s_cache' . md5($key); } } ?> 以上就介紹了Memcached PHP Memcached + APC + 檔案快取封裝實現程式碼,包括了Memcached方面的內容,希望對PHP教程有興趣的朋友有所幫助。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn