有時緩存代碼中的單個對象會很有用,比如有些需要很大開銷獲取的數據或者一些結果集不怎么變化的數據庫查詢。你可以使用一些緩存軟件將這些數據存放在內存中以便下次高速獲取。如果你獲得數據后把他們存起來,下次請求直接從緩存里面獲取數據,在減少數據庫負載的同時能極大提高性能。
許多流行的字節碼緩存方案也能緩存定制化的數據,所以更有理由好好使用它們了。APCu、XCache 以及 WinCache 都提供了 API,以便你將數據緩存到內存中
最常用的內存對象緩存系統是 APCu 和 Memcached 。APCu 對于對象緩存來說是個很好的選擇,它提供了簡單的 API 讓你能將數據緩存到內存,并且很容易設置和使用。APCu 的局限性表現在它依賴于所在的服務器。另一方面,Memcached 以獨立的服務的形式安裝,可以通過網絡交互,這意味著你能將數據集中存在一個高速存取的地方,而且許多不同的系統能從中獲取數據。
值得注意的是當你以 CGI(FastCGI) 的形式使用 PHP 時,每個進程將會有各自的緩存,比如說,APCu 緩存數據無法在多個工作進程中共享。在這種情況下,你可能得考慮 Memcached 了,由于它獨立于 PHP 進程。
通常 APCu 在存取速度上比 Memcached 更快,但是 Memcached 在擴展上更有優勢。如果你不希望應用程序涉及多個服務器,或者不需要 Memcached 提供的其他特性,那么 APCu 可能是最好的選擇。
使用 APCu 的例子:
~~~
<?php
// check if there is data saved as 'expensive_data' in cache
$data = apc_fetch('expensive_data');
if ($data === false) {
// data is not in cache; save result of expensive call for later use
apc_add('expensive_data', $data = get_expensive_data());
}
print_r($data);
~~~
注意在 PHP 5.5 之前,APC 同時提供了對象緩存與字節碼緩存。APCu 是為了將 APC 的對象緩存移植到 PHP 5.5+ 的一個項目,因為現在 PHP 有了內建的字節碼緩存方案 (OPcache)。
更多關于緩存系統的項目:
* [APCu](https://github.com/krakjoe/apcu)
* [APC Functions](http://php.net/ref.apc)
* [Memcached](http://memcached.org/)
* [Redis](http://redis.io/)
* [XCache APIs](http://xcache.lighttpd.net/wiki/XcacheApi)
* [WinCache Functions](http://php.net/ref.wincache)
- 歡迎
- 入門指南
- 使用當前穩定版本
- 內置的WEB服務器
- Mac安裝
- Windows安裝
- 代碼風格指南
- 語言亮點
- 編程范式
- 命名空間
- PHP標準庫
- 命令行接口
- Xdebug
- 依賴管理
- Composer 與 Packagist
- PEAR
- 開發實踐
- 基礎知識
- 日期和時間
- 設計模式
- 使用UTF8編碼
- 依賴注入
- 基本概念
- 復雜的問題
- 容器
- 延伸閱讀
- 數據庫
- MYSQL 擴展
- PDO 擴展
- 數據庫交互
- 數據庫抽象層
- 使用模板
- 好處
- 原生PHP模板
- 編譯模板
- 延伸閱讀
- 錯誤與異常
- 錯誤
- 異常
- 安全
- Web應用程序安全
- 密碼哈希
- 數據過濾
- 配置文件
- 注冊全局變量
- 錯誤報告
- 測試
- 測試驅動開發
- 行為驅動開發
- 其他測試工具
- 服務器與部署
- Platform as a Service (PaaS)
- 虛擬或專用服務器
- 共享服務器
- 構建及部署應用
- 虛擬化
- Vagrant
- Docker
- 緩存
- Opcode緩存
- 對象緩存
- 文檔撰寫
- 資源
- 社區
- Credits