YII2.0框架(三) 缓存机制yii\caching\Cache
2017-05-08 16:59
337 查看
摘自:http://www.yiichina.com/doc/guide/2.0/caching-data
一、Yii 缓存机制
1.数据缓存
$cache = new \yii\caching\FileCache(); //文件缓存
$key = 'name';
$value = 'value11111111111';
$duration = 100;
$data = [
['name' => 'name'],
['value' => 'value']
];
$exists = $cache->exists($key); //检查指定的键是否存在缓存中
$buildKey = $cache->buildKey($key); //检查指定的键是否存在缓存中,超过32位使用MD5加密
$get = $cache->get($key); //从缓存中取得指定键的值
$set = $cache->set($key, $value, $duration);
//将指定键的值存储在缓存中
$multiSet = $cache->multiSet($data, $duration); //将多条数据存在缓存中
$add = $cache->add($key, $value, $duration);
//将多条数据存在缓存中
$delete = $cache->delete($key); //删除指定键值的数据
$flush = $cache->flush($key); //从缓存中删除所有数据
2.片段缓存
<?php
/*@var $this yii\web\View*/
$denpendency = [
'class' => 'yii\caching\FileDenpendency',
];
$key = 'section';
$duration = 5;
$dependency = [ //文件缓存依赖
'class' => 'yii\caching\FileDenpendency',
];
$denpendency = [ //数据库查询缓存依赖
'calss' => 'yii\caching\DbDenpendency',
'sql' => 'SELECT * FROM tb_admin',
];
if ($this->beginCache($key, ['duration' => $duration], ['dependency' => $dependency],
['variations' => \Yii::$app->language])) {
echo '该页面数据缓存';
$this->endCache();
}
?>
3.页面缓存(服务器端缓存)
/**
* @desc 控制器行为
*/
public function behaviors()
{
return [
[
'class' => 'yii\filters\PageCache', //页面缓存(服务器端缓存)
'only' => ['index'],
'duration' => 60,
'variations' => Yii::$app->language,
'dependency' => [
'class' => 'yii\caching\DbDependency',
'sql' => 'SELECT * FROM tb_user',
]
],
];
}
4.HTTP缓存(客户端缓存)
/**
* @desc 控制器行为
*/
public function behaviors()
{
return [
[
'class' => 'yii\filters\HttpCache', //http缓存(客户端缓存 )
'only' => ['input'],
/*Last-Modified 头使用时间戳标明页面自上次客户端缓存后是否被修改过。*/
'lastModified' => function($action, $params) {
$query = new \yii\db\Query();
return strtotime($query->from('tb_admin')->max('created'));
//当数据中最大时间改变,缓存失效
},
/*“Entity Tag”(实体标签,简称 ETag)使用一个哈希值表示页面内容。如果页面 被修改过,哈希值也会随之改变。通过对比客户端的哈希值和服务器端生成的哈 希值,浏览器就能判断页面是否被修改过,进而决定是否应该重新传输内容*/
'etagSeed' => function($action, $params) {
$post = $this->findModel(\Yii::$app->request->get('id'));
return serialize([$post->title, $post->content]);
}
]
];
}
一、Yii 缓存机制
1.数据缓存
$cache = new \yii\caching\FileCache(); //文件缓存
$key = 'name';
$value = 'value11111111111';
$duration = 100;
$data = [
['name' => 'name'],
['value' => 'value']
];
$exists = $cache->exists($key); //检查指定的键是否存在缓存中
$buildKey = $cache->buildKey($key); //检查指定的键是否存在缓存中,超过32位使用MD5加密
$get = $cache->get($key); //从缓存中取得指定键的值
$set = $cache->set($key, $value, $duration);
//将指定键的值存储在缓存中
$multiSet = $cache->multiSet($data, $duration); //将多条数据存在缓存中
$add = $cache->add($key, $value, $duration);
//将多条数据存在缓存中
$delete = $cache->delete($key); //删除指定键值的数据
$flush = $cache->flush($key); //从缓存中删除所有数据
2.片段缓存
<?php
/*@var $this yii\web\View*/
$denpendency = [
'class' => 'yii\caching\FileDenpendency',
];
$key = 'section';
$duration = 5;
$dependency = [ //文件缓存依赖
'class' => 'yii\caching\FileDenpendency',
];
$denpendency = [ //数据库查询缓存依赖
'calss' => 'yii\caching\DbDenpendency',
'sql' => 'SELECT * FROM tb_admin',
];
if ($this->beginCache($key, ['duration' => $duration], ['dependency' => $dependency],
['variations' => \Yii::$app->language])) {
echo '该页面数据缓存';
$this->endCache();
}
?>
3.页面缓存(服务器端缓存)
/**
* @desc 控制器行为
*/
public function behaviors()
{
return [
[
'class' => 'yii\filters\PageCache', //页面缓存(服务器端缓存)
'only' => ['index'],
'duration' => 60,
'variations' => Yii::$app->language,
'dependency' => [
'class' => 'yii\caching\DbDependency',
'sql' => 'SELECT * FROM tb_user',
]
],
];
}
4.HTTP缓存(客户端缓存)
/**
* @desc 控制器行为
*/
public function behaviors()
{
return [
[
'class' => 'yii\filters\HttpCache', //http缓存(客户端缓存 )
'only' => ['input'],
/*Last-Modified 头使用时间戳标明页面自上次客户端缓存后是否被修改过。*/
'lastModified' => function($action, $params) {
$query = new \yii\db\Query();
return strtotime($query->from('tb_admin')->max('created'));
//当数据中最大时间改变,缓存失效
},
/*“Entity Tag”(实体标签,简称 ETag)使用一个哈希值表示页面内容。如果页面 被修改过,哈希值也会随之改变。通过对比客户端的哈希值和服务器端生成的哈 希值,浏览器就能判断页面是否被修改过,进而决定是否应该重新传输内容*/
'etagSeed' => function($action, $params) {
$post = $this->findModel(\Yii::$app->request->get('id'));
return serialize([$post->title, $post->content]);
}
]
];
}
相关文章推荐
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuilder改造PetShop4 的缓存示例
- 温故知新ASP.NET 2.0(C#)(4) - Cache&SqlCacheDependency(缓存和SqlCacheDependency特性)
- 一种高效的对象缓存机制在测试框架中的应用
- .NET中Application,Session,Cookie,ViewState,Cache,Hidden 缓存机制
- .NET中Application,Session,Cookie,ViewState,Cache,Hidden 缓存机制
- [Cache]深入学习Enterprise Library for .NET Framework 2.0的Cache机制——分析篇
- JPA2.0 缓存 之 Cache 注解的使用
- 使用SqlCacheDependency的一点注记(如何开启Sqlserver2000的缓存机制)
- ZendFramework中使用Cache缓存机制
- java 缓存框架java caching system使用示例
- 温故知新ASP.NET 2.0(C#)(4) - Cache&SqlCacheDependency(缓存和SqlCacheDependency特性)
- 使用SqlCacheDependency的一点注记(如何开启Sqlserver2000的缓存机制)
- 重新过一遍ASP.NET 2.0(C#)(4) - Cache&SqlCacheDependency(缓存和SqlCacheDependency特性)(转帖)
- [转载]AAF灵便应用框架简介系列(8):缓存机制介绍
- 用System.Web.Caching.Cache保存数据类的缓存
- CacheDependency、SqlCacheDependency Asp.net 2.0和Sql的缓存管理和使用
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuilder改造PetShop4 的缓存示例
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和PetShop4 的缓存示例
- java 缓存框架java caching system使用示例
- 由cache"引起"的内存问题——记录Linux的Cache Memory(缓存内存)机制