使用 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 不同,在嘗試儲存或獲取值之前,不會有任何活動連線。

在快取中,有三個重要的操作需要實現

  1. 儲存資料: 將新資料新增到 memcached 伺服器
  2. 獲取資料: 從 memcached 伺服器獲取資料
  3. 刪除資料: 從 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");
}