技術交流

Improve Performance with Zend Data Cache

更新於

本文來討論一下 Zend 公司發布的 Zend Server CE 中包含的組件 Zend Data Cache ,如何利用 Zend Data Cache 的 API 來提高程式運行的性能。Cache 的方式有很多,本文主要討論 Zend Server CE 的 Data Cache 提供 API , 我們該如何利用這些 API 來提高性能。Zend Data Cache API 的功能:

  • 保存 Variables 到 Cache 中
  • 從 Cache 中取 Variables
  • 從 Cache 中刪除 Variables
  • 清除 Cache
  • Disk / Memory(SHM)Storage
  • 使用 Namespace Cache
  • Cahce 時的 Directory 分層

Disk / Sharing - Memory Caching

此功能提供了一些選項,以確定在哪兒存儲緩存變量。內存緩存提高了服務器的響應能力和性能的提高,在産品環境中,運行高流量的應用時更加顯其優勢,它減輕了訪問 Hardisk 的負載。 Hardisk 的緩存適用到小的應用程序,確保緩存的這些內容在重新開機後仍然可以使用。

共享內存 / 磁盤存儲是通過使用適當的 API 函數和配置數據高速緩存的指令。如果內存緩存出現錯誤時或是內存用完時, 內存選項的錯誤信息已創建來通知您。下面的例子展示了不同的存儲方式:


// 把變量 hello1 緩存到 Hardisk
if (zend_disk_cache_store("username", "ARES001" === false){
// 不成功,退出
               echo "不成功\n";    exit();
       }
      //把變量 hello1 緩存到 Shared memory:
     if (zend_shm_cache_store("User", 1) === false){
          echo "不成功\n";    exit();
     }
// 把帶 namespace 的變量 UserName 緩存到 Hardisk
if (zend_disk_cache_store("ARES::UserName", 1) === false){
             echo "不成功\n";    exit();
}
// 以共享內存的方式來緩存
if (zend_shm_cache_store("ARES::UserName", 1) === false){
               echo "不成功\n";    exit();
}
//把帶 namespace 的變量 UserName 緩存到 Hardisk,並限定生命周期(3)
if (zend_disk_cache_store("ARES::UserName", 2, 3) === false){
echo "不成功\n";    exit();
}
//把帶 namespace 的變量 UserName 緩存到 Shared Memory ,並限定生命周期(3)
if (zend_shm_cache_store("ARES::UserName", 2, 3) === false){
  echo "不成功\n";    exit();
}

支持 Namespace cache

Namespace提供了一個可定義的標識符,以方便從緩存中刪除指定的項目。在刪除緩存時,你可以用 namespace 的標識來刪除, 也可以用 output_cache_remove 這個 function 來進行刪除。上面的代碼中已經有 namepace 緩存的例子,下面我們來看一個完整的 namespace 緩存的存/取/刪除的代碼片段。


    // cache the namespae variable with lifetime
    if (zend_shm_cache_store("ARES::UserName", 2, 3) === false){
                          echo "不成功\n";    exit();
    }else{
       // fetch the cahced namespace variable from shared memory
       echo  zend_shm_cache_fetch("ARES::UserName"); // will output 2
       // clear the cahced namespace variable
       zend_shm_cache_clear("ARES::UserName");
      }

配置緩存資料夾的深度

我們都有這樣的常識,當一個資料夾下檔案太多時,在打開這個資料夾時,電腦都要想一下才能開的起來。如果你沒有遇到過這樣的情形,那說明你的電腦配置夠好或是文件不夠多。如何才能避免這樣的情形發生呢?最簡單的方式就是整理,把文件分類整理到不同的資料夾中。其實電腦和我們日常生活是一樣的,如果你的東西都放在一個箱子裏,找起來肯定慢,如果分門別類放在不同的小箱子,找起來就非常快了。

此功能只用在 Hardisk Cache 時,Shared Memory Caching 沒有這個概念。如何設定緩存資料夾的深度?

  • 打開 Zend Server CE GUI → Click Directives link

    如果您安裝過後沒有調整過,預設值是 2

    1. 0 = 在一個資料夾中存儲所有的 cache file
    2. 1 = 分開在不同的資料夾存儲 cache file
    3. 2 = 分開在不同資料夾下還有子資料夾來儲存 cache file
  • 您也可以直接修改 datacache.ini 中的 zend_datacache.disk.dir_level 這個變量的值Linux下 datacahce.ini 位於 / usr/local / zend / etc / conf.d / Windows 下 datacache.ini 位於 C: \ Program Files \ zend \ etc \ 下.

何時需要使用 Hardisk Cache?何時需要 Shared Memory Cache ?要依您實際應用的需要。如果需要在 Server 重啓後,仍然需要用到 cache 的,只能用 Hardisk Cache。使用 Shared Memory Cache 速度比 Hardisk Cache 快,但是會占用Memory,這需要您根據實際情況來選擇。

閱讀更多