在yii2中如何使用页面缓存的方法

本文介绍了在Yii2框架中如何使用页面缓存,包括开始使用页面级缓存、针对特殊操作执行钩子方法以自定义缓存逻辑,以及如何清除或刷新缓存。通过这些方法,可以显著提升网站的加载速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面缓存

页面缓存指的是在服务器端缓存整个页面的内容。 随后当同一个页面被请求时,内容将从缓存中取出,而不是重新生成。可免去所有查询数据库的和代码处理的时间, 大大加快了页面打开的速度

开始使用

这里演示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

本文发布于https://www.xstnet.com/article-99.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值