页面缓存
页面缓存指的是在服务器端缓存整个页面的内容。 随后当同一个页面被请求时,内容将从缓存中取出,而不是重新生成。可免去所有查询数据库的和代码处理的时间, 大大加快了页面打开的速度
开始使用
这里演示pageCache
也就是页面级的缓存使用方法,借助于yii\filters\PageCache
假设当前设置的缓存页面为文章详情页面
在控制器中添加行为
public function behaviors()
{
return [
'pageCache' => [
'class' => 'yii\filters\PageCache',
'only' => ['index'], // 对哪些方法开启缓存
'duration' => 3600, // 缓存有效时间,单位秒,设置为0代表永不过期
'enabled' => true, // 是否启用页面缓存
//缓存键, 将导致缓存内容更改的因素列表。 每个因素都是表示变体的字符串(例如语言,一个 GET 参数)
// 如果是缓存文章内容, 需要将所有代表该文章的参数都加上, 比如ID,page等, 同时也可针对ajax
'variations' => array_merge(Yii::$app->request->get(), [
Yii::$app->request->isAjax,
]),
// 缓存内容所依赖的依赖项, 也就是判断缓存是否应该更新的依据,如果不应更新, 则每次请求只会执行一次该sql, 直接返回缓存结果
// 当本次sql的执行结果不等于缓存中的结果时, 刷新缓存, 每次请求都会执行该sql用以判断是否需要更新缓存
// 针对文章列表页, 可设置sql为 select max(`updated_at`) from article,
// 针对有新发布就更新的缓存页面, 可设置sql为 select count(*) from table
'dependency' => [
'class' => 'yii\caching\DbDependency',
'sql' => "SELECT `updated_at` FROM article where id = :id",
// 可设置绑定参数, 无参数时为空
'params' => [
':id' => ((int) Yii::$app->request->get('id', 0)),
]
],
],
];
}
针对特殊操作执行钩子方法
可实现一个类继承yii\filters\PageCache
, 通过重构钩子方法, 方法如下:
public boolean beforeAction($action)
在执行操作之前调用此方法public boolean|array beforeCacheResponse()
在启动响应缓存之前调用此方法。 您可以通过返回 false 来重写此方法以取消缓存也可以通过返回数组而 不是 true 来将其他数据存储在缓存条目中。public void afterRestoreResponse($data)
此方法是在响应恢复完成后(但在响应发送之前)调用的。 您可以重写此方法以便在发送响应之前进行最后一刻的准备。
清除或刷新缓存
- 可手动删除app/runtime/cache清除缓存
- 可通过类继承重定义常量
PAGE_CACHE_VERSION
来刷新所有缓存
更多
了解更多请访问官方文档 https://www.yiichina.com/doc/api/2.0/yii-filters-pagecache