@a5635268
2016-02-08T20:47:42.000000Z
字数 2578
阅读 1874
源码分析与使用笔记
<?php
//开启两个memcached服务器
[
'components' => [
'cache' => [
'class' => 'yii\caching\MemCache',
'keyPrefix' => 'myapp', // 唯一键前缀
'servers' => [
[
'host' => 'server1',
'port' => 11211,
'weight' => 100,
],
[
'host' => 'server2',
'port' => 11211,
'weight' => 50,
],
],
],
]
];
/*
* 支持的常用缓存
yii\caching\FileCache:使用标准文件存储缓存数据。这个特别适用于缓存大块数据,例如一个整页的内容。
yii\caching\MemCache:使用 PHP memcache 和 memcached 扩展。这个选项被看作分布式应用环境中(例如:多台服务器,有负载均衡等)最快的缓存方案。
yii\redis\Cache:实现了一个基于 Redis 键值对存储器的缓存组件(需要 redis 2.6.12 及以上版本的支持 )。
*/
/**
* 缓存API
yii\caching\Cache::get():通过一个指定的键(key)从缓存中取回一项数据。如果该项数据不存在于缓存中或者已经过期/失效,则返回值 false。
yii\caching\Cache::set():将一项数据指定一个键,存放到缓存中。
yii\caching\Cache::add():如果缓存中未找到该键,则将指定数据存放到缓存中。
yii\caching\Cache::mget():通过指定的多个键从缓存中取回多项数据。 //如果不支持批量的YII也会模拟实现
yii\caching\Cache::mset():将多项数据存储到缓存中,每项数据对应一个键。
yii\caching\Cache::madd():将多项数据存储到缓存中,每项数据对应一个键。如果某个键已经存在于缓存中,则该项数据会被跳过。
yii\caching\Cache::exists():返回一个值,指明某个键是否存在于缓存中。
yii\caching\Cache::delete():通过一个键,删除缓存中对应的值。
yii\caching\Cache::flush():删除缓存中的所有数据。
*/
// 实现了ArrayAccess接口
$cache['var1'] = $value1; // 等价于: $cache->set('var1', $value1);
$value2 = $cache['var2']; // 等价于: $value2 = $cache->get('var2');
//查询缓存,可以用于 ActiveRecord 和 DAO
$duration = 60; // 缓存查询结果60秒
$dependency = '缓存依赖'; // 可选的缓存依赖
//$db 是一个 yii\db\Connection 实例
$db->beginCache($duration, $dependency);
// ...这儿执行数据库查询都会缓存起来
// yii\db\Connection::queryCacheDuration: 查询结果在缓存中的有效期,以秒表示。如果在调用 yii\db\Connection::beginCache() 时传递了一个显式的时值参数,则配置中的有效期时值会被覆盖。
// yii\db\Connection::queryCache: 缓存应用组件的 ID。默认为 'cache'。只有在设置了一个有效的缓存应用组件时,查询缓存才会有效。
$db->endCache();
?>
<?php
#1. 超时设置 略
#2. 缓存依赖:缓存依赖用 yii\caching\Dependency 的派生类所表示。当调用 yii\caching\Cache::set() 在缓存中存储一项数据时,可以同时传递一个关联的缓存依赖对象。
// 创建一个对 example.txt 文件修改时间的缓存依赖
$dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']);
// 缓存数据将在30秒后超时
// 如果 example.txt 被修改,它也可能被更早地置为失效状态。
$cache->set($key, $data, 30, $dependency);
// 缓存会检查数据是否已超时。
// 它还会检查关联的依赖是否已变化。
// 符合任何一个条件时都会返回 false。
$data = $cache->get($key);
/**
* 缓存依赖:
yii\caching\ChainedDependency:如果依赖链上任何一个依赖产生变化,则依赖改变。
yii\caching\DbDependency:如果指定 SQL 语句的查询结果发生了变化,则依赖改变。
yii\caching\ExpressionDependency:如果指定的 PHP 表达式执行结果发生变化,则依赖改变。
yii\caching\FileDependency:如果文件的最后修改时间发生变化,则依赖改变。
yii\caching\GroupDependency:将一项缓存数据标记到一个组名,你可以通过调用 yii\caching\GroupDependency::invalidate() 一次性将相同组名的缓存全部置为失效状态。
*/
?>
片段缓存指的是缓存中的某个片段。例如,一个页面显示了逐年销售额的摘要表格,可以把表格缓存下来,以消除每次请求都要重新生成表格的耗时。片段缓存是基于数据缓存实现的。
http://www.yiichina.com/doc/guide/2.0/caching-fragment
页面缓存指的是在服务器端缓存整个页面的内容。随后当同一个页面被请求时,内容将从缓存中取出,而不是重新生成。
http://www.yiichina.com/doc/guide/2.0/caching-page
http://www.yiichina.com/doc/guide/2.0/caching-http
Web 应用还可以利用客户端缓存去节省相同页面内容的生成和传输时间,其他缓存是缓存在服务器端,但HTTP缓存是缓存在客户端里面的;