©
本文档使用 PHP中文网手册 发布
CodeIgniter以一些最流行的快速和动态缓存形式为特色。除了基于文件的缓存之外,所有的都需要特定的服务器要求,并且如果服务器要求未得到满足,则会引发致命异常。
使用示例
类参考
驱动程序
替代PHP缓存(APC)缓存
基于文件的缓存
Memcached缓存
WinCache缓存
Redis缓存
虚拟缓存
以下示例将加载缓存驱动程序,将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;
您也可以通过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'
class CI_Cacheis_supported($driver)
参数: | $ driver(string) - 缓存驱动程序的名称 |
---|---|
返回: | 如果支持则为TRUE,否则为FALSE |
返回类型: | 布尔 |
$ driver(string) - 缓存驱动程序的名称
返回:如果支持则返回TRUE,否则返回FALSE
返回类型:布尔值
当通过`$ this-> cache-> get()`访问驱动程序时,会自动调用此方法。但是,如果使用各个驱动程序,请务必调用此方法以确保主机环境中支持驱动程序。
if($ this-> cache-> apc-> is_supported()){
if($ data = $ this-> cache-> apc-> get('my_cache')){//做事情。
}
}
get($id)
参数: | $ id(字符串) - 缓存项目名称 |
---|---|
返回: | 如果未找到项目值或FALSE |
返回类型: | 杂 |
$ id(字符串) - 缓存项目名称
返回:如果未找到,则返回项目值或FALSE
返回类型:混合
此方法将尝试从缓存存储中获取项目。如果该项目不存在,该方法将返回FALSE。
$foo = $this->cache->get('my_cached_item');
save($id, $data[, $ttl = 60[, $raw = FALSE]])
参数: | $ id(string) - 缓存项目名称$ data(mixed) - 要保存的数据$ ttl(int) - 生存时间,以秒为单位(默认为60)$ raw(bool) - 是否存储原始值 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 串 |
$ id(字符串) - 缓存项目名称
$ data(混合) - 要保存的数据
$ ttl(int) - 生存时间,以秒为单位(默认值为60)
$ raw(bool) - 是否存储原始值
返回:成功时为TRUE,失败时为FALSE
返回类型:字符串
该方法将把一个项目保存到缓存存储中。如果保存失败,该方法将返回FALSE。
$ this-> cache-> save('cache_item_id','data_to_cache');
注意
该$raw
参数仅供APC和Memcache使用,以允许使用increment()
和decrement()
。
delete($id)
参数: | $ id(字符串) - 缓存项目的名称 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ id(字符串) - 缓存项目的名称
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
此方法将从缓存存储中删除特定的项目。如果项目删除失败,该方法将返回FALSE。
$this->cache->delete('cache_item_id');
increment($id[, $offset = 1])
参数: | $ id(字符串) - 缓存ID $偏移量(整数) - 要添加的步骤/值 |
---|---|
返回: | 成功的新价值,失败时失败 |
返回类型: | 杂 |
$ id(字符串) - 缓存ID
$ offset(int) - 要添加的步骤/值
返回:成功的新值,失败时的FALSE
返回类型:混合
执行原始存储值的原子增量。
//'iterator'的值为2 $ this-> cache-> increment('iterator'); //'iterator'现在是3
$ this-> cache-> increment('iterator',3); //'迭代器'现在是6
decrement($id[, $offset = 1])
参数: | $ id(字符串) - 缓存ID $偏移量(整数) - 步骤/值减少 |
---|---|
返回: | 成功的新价值,失败时失败 |
返回类型: | 杂 |
$ id(字符串) - 缓存ID
$ offset(int) - 要减少的步骤/值
返回:成功的新值,失败时的FALSE
返回类型:混合
执行原始存储值的原子减量。
//'iterator'的值为6 $ this-> cache-> decrement('iterator'); //'iterator'现在是5 $ this-> cache-> decrement('iterator',2); //'迭代器'现在是3
clean()
返回: | 成功为TRUE,失败为FALSE |
---|---|
返回类型: | 布尔 |
cache_info()
返回: | 有关整个缓存数据库的信息 |
---|---|
返回类型: | 杂 |
get_metadata($id)
参数: | $ id(字符串) - 缓存项目名称 |
---|---|
返回: | 已缓存项目的元数据 |
返回类型: | 杂 |
$ id(字符串) - 缓存项目名称
返回:缓存项目的元数据
返回类型:混合
此方法将返回缓存中特定项目的详细信息。
var_dump($this->cache->get_metadata('my_cached_item'));
Note
返回的信息和数据的结构取决于正在使用哪个适配器。
上面列出的所有方法都可以在没有将特定适配器传递给驱动程序加载器的情况下访问,如下所示
$this->load->driver('cache');$this->cache->apc->save('foo', 'bar', 10);
与输出类的缓存不同,驱动程序基于文件的缓存允许缓存多段视图文件。谨慎使用这一点,并确保对应用程序进行基准测试,因为磁盘I / O将通过缓存取消积极成果。
上面列出的所有方法都可以在没有将特定适配器传递给驱动程序加载器的情况下访问,如下所示
$this->load->driver('cache');$this->cache->file->save('foo', 'bar', 10);
可以在位于_application / config / *目录中的memcached.php配置文件中指定多个Memcached服务器。
上面列出的所有方法都可以在没有将特定适配器传递给驱动程序加载器的情况下访问,如下所示
$this->load->driver('cache');$this->cache->memcached->save('foo', 'bar', 10);
在Windows下,您也可以使用WinCache驱动程序。
上面列出的所有方法都可以在没有将特定适配器传递给驱动程序加载器的情况下访问,如下所示
$this->load->driver('cache');$this->cache->wincache->save('foo', 'bar', 10);
Redis是一款内存键值存储器,可以在LRU缓存模式下运行。要使用它,您需要Redis服务器和phpredis PHP扩展。
连接到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;
上面列出的所有方法都可以在没有将特定适配器传递给驱动程序加载器的情况下访问,如下所示
$this->load->driver('cache'); $this->cache->redis->save('foo', 'bar', 10);
这是一个总是“错过”的缓存后端。它不存储数据,但可以让您在不支持所选缓存的环境中保留缓存代码。