@a5635268
2016-02-08T12:47:42.000000Z
字数 2578
阅读 2081
源码分析与使用笔记
<?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 及以上版本的支持 )。*//*** 缓存APIyii\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缓存是缓存在客户端里面的;
