# CodeIgniter 用户指南 版本 2.2.0

编辑文档、查看近期更改请 登录 或 注册 找回密码

搜索用户指南

查看原文

# 缓存适配器

注：在2.0.3以前有bug，请下载最新版本的CI。

CodeIgniter提供了多种目前业界流行的快速动态缓存组件的封装类。除了基于纯文本的缓存（文件缓存）外，其他缓存组件均需对服务器环境进行正确配置才能使用，否则程序会抛出致命异常(Fatal Exception)错误。

## 目录

- 用法举例
- 函数速查

### 支持的缓存适配器

- Alternative PHP Cache (APC) 缓存
- 纯文本缓存
- Memcached缓存
- 虚拟缓存

## 用法举例

下面这个例子：首先加载缓存适配器，然后指定 APC 作为适配器优先使用的缓存实现，同时，我们指定文本缓存作为替代方案。这样，在一些服务器不支持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;`

译者注：为了便于理解上面的代码，我们不妨举个例子。缓存适配器，我们可以理解为一个“通电的插座”；而APC缓存，相当于我们希望插在插座上使用的空调；文本缓存我们可以理解与空调功能相同但效率却完全不同的电风扇。

# Function Reference

## is_supported(driver['string'])

如果你通过 `$this->cache->get()` 来访问缓存适配器，此函数将自动触发。但是，如果你希望有针对性的使用某个具体的缓存实现（如下例中的 APC），请确保调用此函数，用来检查服务器环境是否支持这种缓存类型。

`if ($this->cache->apc->is_supported())
{
if ($data = $this->cache->apc->get('my_cache'))
{
// do things.
}
}`

## get(id['string'])

此函数将尝试从缓存系统中获取指定的缓存项。如果缓存不存在，或者超过缓存期限，则返回 `FALSE`。

`$foo = $this->cache->get('my_cached_item');`

## save(id['string'], data['mixed'], ttl['int'])

此函数尝试将一个缓存项存储到对应的缓存系统中。如果存储失败，则返回`FALSE`。

第三个参数（可选项）指定了缓存的存活时间，默认为60秒。

`$this->cache->save('cache_item_id', 'data_to_cache');`

## delete(id['string'])

此函数尝试从缓存系统中删除某个指定的缓存项。如果删除失败，则返回`FALSE`。

`$this->cache->delete('cache_item_id');`

## clean()

此函数用来清空所有缓存。如果清空失败，则返回 `FALSE`.

`$this->cache->clean();`

## cache_info()

此函数将返回所有缓存信息.

`var_dump($this->cache->cache_info());`

## get_metadata(id['string'])

此函数将返回缓存系统中指定缓存项的详细信息。

`var_dump($this->cache->get_metadata('my_cached_item'));`

# Drivers

## Alternative PHP Cache (APC) 缓存

以上列举的所有方法可直接访问，不需传递特定的适配器实现给适配器加载器，如下：

`$this->load->driver('cache');
$this->cache->apc->save('foo', 'bar', 10);`

For more information on APC, please see http://php.net/apc

## 基于文件的缓存

不同于从输出类（Output Class）缓存, 基于文件的缓存可以对view页面分块缓存。不过使用时需要小心，应该通过对程序进行评测，以确保由于磁盘I/O增加所导致的性能下降相对于缓存所带来的性能提升是值得的。

以上列举的所有方法可直接访问，不需传递特定的适配器实现给适配器加载器，如下：

`$this->load->driver('cache');
$this->cache->file->save('foo', 'bar', 10);`

## Memcached 缓存

使用分布式 Memcached 服务器 可以通过配置文件： memcached.php 来配置,该文件在 `application/config/` 目录下.

以上列举的所有方法可直接访问，不需传递特定的适配器实现给适配器加载器，如下：

`$this->load->driver('cache');
$this->cache->memcached->save('foo', 'bar', 10);`

若想了解更多关于 Memcached的信息, 请参考 http://php.net/memcached

## 虚拟缓存（Dummy Cache）

虚拟缓存是一种总是被忽略的后台缓存。它不存储数据，但是若有的环境不支持你选择的缓存机制时，它可以让你的缓存代码能正常的执行。

翻译贡献者: amos, cnsaturn, Hex, LSvKing, qixingyue, tangjianft, wdlth, zxuqian, 曜日晨阳
最后修改: 2013-03-19 02:37:26