使用 memcache 快取
Memcache 是一個分散式物件快取系統,使用 key-value
儲存小資料。在開始將 Memcache
程式碼呼叫到 PHP 之前,你需要確保它已安裝。這可以在 php 中使用 class_exists
方法完成。驗證模組已安裝後,首先要連線到 memcache 伺服器例項。
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
}else {
print "Not connected to cache server";
}
這將驗證是否安裝了 Memcache php-drivers 並連線到 localhost 上執行的 memcache 伺服器例項。
Memcache 作為守護程序執行,稱為 memcached
在上面的示例中,我們只連線到單個例項,但你也可以使用連線到多個伺服器
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->addServer('192.168.0.100',11211);
$cache->addServer('192.168.0.101',11211);
}
請注意,在這種情況下,與 connect 不同,在嘗試儲存或獲取值之前,不會有任何活動連線。
在快取中,有三個重要的操作需要實現
- 儲存資料: 將新資料新增到 memcached 伺服器
- 獲取資料: 從 memcached 伺服器獲取資料
- 刪除資料: 從 memcached 伺服器刪除已存在的資料
儲存資料
$cache
或 memcached 類物件有一個 set
方法,它接受一個鍵,值和時間來儲存(ttl)的值。
$cache->set($key, $value, 0, $ttl);
這裡$ ttl 或生存時間是指你希望 memcache 在伺服器上儲存該對的時間(以秒為單位)。
獲取資料
$cache
或 memcached 類物件有一個 get
方法,它接受一個鍵並返回相應的值。
$value = $cache->get($key);
如果沒有為鍵設定值,它將返回 null
刪除資料
有時你可能需要刪除一些快取值 .$cache
或 memcache 例項有一個 delete
方法可以用於相同的。
$cache->delete($key);
快取的小方案
讓我們假設一個簡單的部落格。它將在登入頁面上有多個帖子,每個頁面載入時都會從資料庫中獲取。為了減少 sql 查詢,我們可以使用 memcached 來快取帖子。這是一個非常小的實現
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
if(($data = $cache->get('posts')) != null) {
// Cache hit
// Render from cache
} else {
// Cache miss
// Query database and save results to database
// Assuming $posts is array of posts retrieved from database
$cache->set('posts', $posts,0,$ttl);
}
}else {
die("Error while connecting to cache server");
}