# 緩存驅動器
CodeIgniter 提供了幾種最常用的快速緩存的封裝,除了基于文件的緩存, 其他的緩存都需要對服務器進行特殊的配置,如果配置不正確,將會拋出 一個致命錯誤異常(Fatal Exception)。
[TOC]
## 使用示例
下面的示例代碼用于加載緩存驅動器,使用?[APC](http://codeigniter.org.cn/user_guide/libraries/caching.html#alternative-php-cache-apc-caching)?作為緩存, 如果 APC 在服務器環境下不可用,將降級到基于文件的緩存。
~~~
$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
if ( ! $foo = $this->cache->get('foo'))
{
echo 'Saving to the cache!<br />';
$foo = 'foobarbaz!';
// Save into the cache for 5 minutes
$this->cache->save('foo', $foo, 300);
}
echo $foo;
~~~
你也可以設置?**key_prefix**?參數來給緩存名添加前綴,當你在同一個環境下運行多個應用時,它可以避免沖突。
~~~
$this->load->driver('cache',
array('adapter' => 'apc', 'backup' => 'file', 'key_prefix' => 'my_')
);
$this->cache->get('foo'); // Will get the cache entry named 'my_foo'
~~~
## 類參考
classCI_Cache
>[info] ### is_supported($driver)
參數:
* **$driver**?(string) -- the name of the caching driver
返回: TRUE if supported, FALSE if not
返回類型: bool
當使用?$this->cache->get()?方法來訪問驅動器時該方法會被自動調用,但是,如果你使用了某些個人的驅動器, 應該先調用該方法確保這個驅動器在服務器環境下是否被支持。
~~~
if ($this->cache->apc->is_supported())
{
if ($data = $this->cache->apc->get('my_cache'))
{
// do things.
}
}
~~~
>[info] ### get($id)
參數:
* **$id**?(string) -- Cache item name
返回: Item value or FALSE if not found
返回類型: mixed
該方法用于從緩存中獲取一項條目,如果獲取的條目不存在,方法返回 FALSE 。
~~~
$foo = $this->cache->get('my_cached_item');
~~~
>[info] ### save($id,?$data[,?$ttl = 60[,?$raw = FALSE]])
參數:
* **$id**?(string) -- Cache item name
* **$data**?(mixed) -- the data to save
* **$ttl**?(int) -- Time To Live, in seconds (default 60)
* **$raw**?(bool) -- Whether to store the raw value
返回: TRUE on success, FALSE on failure
返回類型: string
該方法用于將一項條目保存到緩存中,如果保存失敗,方法返回 FALSE 。
~~~
$this->cache->save('cache_item_id', 'data_to_cache');
~~~
> 注解
> 參數?$raw?只有在使用 APC 和 Memcache 緩存時才有用, 它用于?increment()?和?decrement()?方法。
>[info] ### delete($id)
參數:
* **$id**?(string) -- name of cached item
返回: TRUE on success, FALSE on failure
返回類型: bool
該方法用于從緩存中刪除一項指定條目,如果刪除失敗,方法返回 FALSE 。
~~~
$this->cache->delete('cache_item_id');
~~~
>[info] ### increment($id[,?$offset = 1])
參數:
* **$id**?(string) -- Cache ID
* **$offset**?(int) -- Step/value to add
返回: New value on success, FALSE on failure
返回類型: mixed
對緩存中的值執行原子自增操作。
~~~
// 'iterator' has a value of 2
$this->cache->increment('iterator'); // 'iterator' is now 3
$this->cache->increment('iterator', 3); // 'iterator' is now 6
~~~
>[info] ### decrement($id[,?$offset = 1])
參數:
* **$id**?(string) -- Cache ID
* **$offset**?(int) -- Step/value to reduce by
返回: New value on success, FALSE on failure
返回類型: mixed
對緩存中的值執行原子自減操作。
~~~
// 'iterator' has a value of 6
$this->cache->decrement('iterator'); // 'iterator' is now 5
$this->cache->decrement('iterator', 2); // 'iterator' is now 3
~~~
>[info] ### clean()
返回: TRUE on success, FALSE on failure
返回類型: bool
該方法用于清空整個緩存,如果清空失敗,方法返回 FALSE 。
~~~
$this->cache->clean();
~~~
>[info] ### cache_info()
返回: Information on the entire cache database
返回類型: mixed
該方法返回整個緩存的信息。
~~~
var_dump($this->cache->cache_info());
~~~
> 注解
> 返回的信息以及數據結構取決于使用的緩存驅動器。
>[info] ### get_metadata($id)
參數:
* **$id**?(string) -- Cache item name
返回: Metadata for the cached item
返回類型: mixed
該方法用于獲取緩存中某個指定條目的詳細信息。
~~~
var_dump($this->cache->get_metadata('my_cached_item'));
~~~
> 注解
> 返回的信息以及數據結構取決于使用的緩存驅動器。
## 驅動器
### 可選 PHP 緩存(APC)
上述所有方法都可以直接使用,而不用在加載驅動器時指定 adapter 參數,如下所示:
~~~
$this->load->driver('cache');
$this->cache->apc->save('foo', 'bar', 10);
~~~
關于 APC 的更多信息,請參閱?[http://php.net/apc](http://php.net/apc)
### 基于文件的緩存
和輸出類的緩存不同的是,基于文件的緩存支持只緩存視圖的某一部分。使用這個緩存時要注意, 確保對你的應用程序進行基準測試,因為當磁盤 I/O 頻繁時可能對緩存有負面影響。
上述所有方法都可以直接使用,而不用在加載驅動器時指定 adapter 參數,如下所示:
~~~
$this->load->driver('cache');
$this->cache->file->save('foo', 'bar', 10);
~~~
### Memcached 緩存
可以在 memcached.php 配置文件中指定多個 Memcached 服務器,配置文件位于?application/config/?目錄。
上述所有方法都可以直接使用,而不用在加載驅動器時指定 adapter 參數,如下所示:
~~~
$this->load->driver('cache');
$this->cache->memcached->save('foo', 'bar', 10);
~~~
關于 Memcached 的更多信息,請參閱?[http://php.net/memcached](http://php.net/memcached)
### WinCache 緩存
在 Windows 下,你還可以使用 WinCache 緩存。
上述所有方法都可以直接使用,而不用在加載驅動器時指定 adapter 參數,如下所示:
~~~
$this->load->driver('cache');
$this->cache->wincache->save('foo', 'bar', 10);
~~~
關于 WinCache 的更多信息,請參閱?[http://php.net/wincache](http://php.net/wincache)
### Redis 緩存
Redis 是一個在內存中以鍵值形式存儲數據的緩存,使用 LRU(最近最少使用算法)緩存模式, 要使用它,你需要先安裝?[Redis 服務器和 phpredis 擴展](https://github.com/phpredis/phpredis)。
連接 Redis 服務器的配置信息必須保存到 application/config/redis.php 文件中,可用參數有:
~~~
$config['socket_type'] = 'tcp'; //`tcp` or `unix`
$config['socket'] = '/var/run/redis.sock'; // in case of `unix` socket type
$config['host'] = '127.0.0.1';
$config['password'] = NULL;
$config['port'] = 6379;
$config['timeout'] = 0;
~~~
上述所有方法都可以直接使用,而不用在加載驅動器時指定 adapter 參數,如下所示:
~~~
$this->load->driver('cache');
$this->cache->redis->save('foo', 'bar', 10);
~~~
關于 Redis 的更多信息,請參閱?[http://redis.io](http://redis.io/)
### 虛擬緩存(Dummy Cache)
這是一個永遠不會命中的緩存,它不存儲數據,但是它允許你在當使用的緩存在你的環境下不被支持時, 仍然保留使用緩存的代碼。
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量