使用方法:
Memcached
複製程式碼程式碼如下:
$cache = new Cache_MemCache()
$cache->addServer('www2',11211,20); // 該伺服器擁有雙倍的內存,並獲得雙倍的權重
$cache ->addServer('www3',11211);
// 在快取中儲存一些資料10 分鐘
$cache->store('my_key','foobar',600);
// 再次從快取取出
echo($cache->fetch('my_key'));
複製程式碼
複製程式碼
複製程式碼
複製程式碼
複製程式碼
程式碼如下:
$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教程有興趣的朋友有所幫助。