首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
13.1 初识Memcached
13.2 Memcached在Web中的应用
13.2.1 减小数据库查询的压力
13.2.2 对海量数据的处理
13.3 Memcached的安装及管理
13.3.1 安装Memcached软件
13.3.2 Memcached服务器的管理
13.4 使用Telnet作为Memcached的客户端管理
13.4.1 Telnet客户端连接Memcached服务器
13.4.2 连接Memcached服务器
13.4.3 基本的Memcached客户端命令
13.4.4 查看当前Memcached服务器的运行状态信息
13.4.5 数据管理指令
13.5 PHP的Memcached客户端扩展函数库
13.5.1 安装php_memcache.dll扩展函数库
13.5.2 相关扩展方法
13.5.3 实例应用
13.6 Yii2框架MemCache缓存组件
13.6.1 配置使用MemCache缓存组件
13.6.2 缓存API
13.6.3 MemCache实例
13.7 缓存依赖
13.7.1项目实现迭代十九:产品中心内容页中应用缓存依赖
13.8 片段缓存
13.8.1 片段缓存的起始和结束
13.8.2 小部件FragmentCache类部分构成
13.8.3 项目实现迭代二十:产品中心栏目实现片段缓存
13.9 页面缓存
13.10 项目实现迭代二十一:“关于我们”内容页中应用页面缓存
13.11 局部无缓存
13.12 Yii2框架其他缓存组件介绍
14.1 Apache服务器的日志
14.1.1 访问日志的格式
14.1.2 错误日志的格式
14.1.3 日志的定制
14.2 PHP日志
14.2.1 PHP配置文件“php.ini”
14.2.2 通过配置文件生成日志
14.2.3 通过方法记录日志到指定文件
14.2.4 错误信息记录到操作系统的日志里
14.3 Yii2框架的日志记录
14.3.1 记录日志消息
14.3.2 在配置文件中设置日志保存路径目标
15.1 关于URL
15.1.1 URL组成
15.1.2 良好的URL设计原则
15.2 初步认识Apache重写模块
15.3 Yii2框架的URL管理
15.3.1 创建URL
15.3.2 解析URL
15.3.3 URL模式
15.3.4 实现伪静态
15.3.5 带有正则表达式的URL规则
15.3.6 一个规则匹配多个路由
15.4 隐藏入口文件index.php
15.4.1 再次使用Apache重写模块
15.4.2 RewriteCond指令详解
15.4.3 Yii2框架创建URL时隐藏入口文件
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(下)
小册名称:Yii2框架从入门到精通(下)
### 13.12 Yii2框架其他缓存组件介绍 在Yii2框架中,缓存机制是提高应用性能的重要手段之一。除了常见的文件缓存、内存缓存(如Redis、Memcached)和数据库缓存外,Yii2还提供了多种其他缓存组件,以满足不同场景下的需求。这些缓存组件各有特色,能够优化应用的不同方面,从而提高用户体验和响应速度。本节将详细介绍Yii2框架中几种不常被提及但同样重要的缓存组件及其使用方法。 #### 13.12.1 依赖注入缓存(Dependency Injection Cache) 在Yii2中,依赖注入不仅用于服务组件的创建和管理,还可以与缓存机制结合,实现基于依赖关系的缓存失效策略。当缓存数据依赖于某些条件(如数据库表中的数据变化)时,传统的缓存方法可能需要手动管理这些依赖项,而依赖注入缓存则提供了一种自动化的解决方案。 **核心概念**: - **依赖对象**:Yii2中的`yii\caching\Dependency`接口或其子类定义了缓存依赖的抽象。具体实现如`DbDependency`、`ExpressionDependency`等,分别对应不同的依赖场景。 - **缓存组件配置**:在配置缓存组件时,可以通过`dependency`选项指定依赖对象,当依赖项发生变化时,缓存数据将自动失效。 **示例**: ```php use Yii; use yii\caching\DbDependency; use yii\caching\FileCache; // 配置缓存组件 $cache = new FileCache(); // 创建一个DbDependency,依赖于某个表的特定行 $dependency = new DbDependency([ 'sql' => 'SELECT MAX(updated_at) FROM user_profile', ]); // 使用缓存并指定依赖 $data = $cache->getOrSet('user_profiles', function () { // 执行复杂的数据查询 return Yii::$app->db->createCommand('SELECT * FROM user_profile')->queryAll(); }, 3600, $dependency); // 此时,如果user_profile表的updated_at字段有任何更新,缓存将自动失效 ``` #### 13.12.2 片段缓存(Fragment Caching) 片段缓存是一种在页面渲染过程中,仅缓存页面某一部分内容的技术。这对于动态内容较多的页面特别有用,因为它允许开发者仅更新或重新渲染页面中的变化部分,而无需重新加载整个页面。 **使用场景**: - 博客文章列表页中的侧边栏信息,如热门文章、最近评论等。 - 电商网站的产品列表页中的价格、库存等动态信息。 **实现方式**: Yii2提供了`yii\widgets\FragmentCache`小部件,用于实现片段缓存。只需将该小部件包裹在需要缓存的内容周围,并指定一个唯一的缓存键即可。 **示例**: ```php use yii\widgets\FragmentCache; // 使用FragmentCache包裹需要缓存的片段 echo FragmentCache::widget([ 'id' => 'sidebar', 'duration' => 3600, 'dependency' => [ 'class' => 'yii\caching\DbDependency', 'sql' => 'SELECT MAX(updated_at) FROM recent_posts', ], 'content' => function ($context, $key) { // 渲染侧边栏内容 // ... return $this->render('_sidebar'); } ]); ``` #### 13.12.3 动态内容缓存(Dynamic Content Caching) 动态内容缓存是指在应用运行时,根据用户请求的不同参数(如查询字符串、请求头等)动态地生成缓存键,从而缓存并复用相同的响应内容。这对于减少服务器负担、提高响应速度尤为重要。 **实现策略**: - 使用请求参数(如GET请求中的查询字符串)作为缓存键的一部分。 - 结合依赖注入缓存,确保当相关数据发生变化时,缓存能够自动失效。 **示例**: ```php // 假设有一个根据用户ID查询用户信息的API $userId = Yii::$app->request->get('user_id'); $cacheKey = 'user_info_' . $userId; // 使用文件缓存或任何其他缓存组件 $cache = Yii::$app->cache; // 检查缓存中是否存在用户信息 if (($userInfo = $cache->get($cacheKey)) === false) { // 如果不存在,则查询数据库并缓存结果 $userInfo = User::find()->where(['id' => $userId])->one(); $cache->set($cacheKey, $userInfo, 3600); } // 返回用户信息 return $userInfo; ``` #### 13.12.4 HTTP缓存(HTTP Caching) HTTP缓存是一种利用客户端(如浏览器)和服务器之间HTTP协议的缓存控制机制来减少数据传输和服务器负载的技术。Yii2通过响应头(如`Cache-Control`、`Expires`、`ETag`、`Last-Modified`)的支持,方便地实现了HTTP缓存的集成。 **关键特性**: - **强缓存验证**:通过`ETag`或`Last-Modified`头部,服务器可以告诉客户端其持有的资源是否仍然是最新的。 - **弱缓存验证**:客户端可能基于`Cache-Control`或`Expires`头部信息,无条件地重用缓存资源,但也可能在后续请求中通过发送条件请求(如`If-Modified-Since`或`If-None-Match`)来验证缓存的有效性。 **Yii2中的实现**: Yii2的`yii\filters\HttpCache`过滤器可以自动为响应设置适当的HTTP缓存控制头部。通过在控制器或动作中应用此过滤器,可以轻松地启用HTTP缓存。 **示例**: ```php use yii\filters\HttpCache; public function behaviors() { return [ 'httpCache' => [ 'class' => HttpCache::className(), 'only' => ['index'], // 仅对index动作应用HTTP缓存 'lastModified' => function ($action, $params) { // 根据业务逻辑确定最后修改时间 // ... return $lastModifiedTime; }, 'etagSeed' => function ($action, $params) { // 生成ETag的种子值 // ... return $etagSeed; }, ], ]; } ``` #### 结论 Yii2框架提供了丰富的缓存组件和策略,使得开发者能够根据不同的应用场景和需求,灵活选择并配置缓存方案。从基本的文件缓存到高级的HTTP缓存,再到依赖注入缓存和片段缓存,Yii2的缓存机制为应用性能优化提供了强大的支持。通过合理利用这些缓存组件,可以显著提升应用的响应速度和用户体验。
上一篇:
13.11 局部无缓存
下一篇:
14.1 Apache服务器的日志
该分类下的相关小册推荐:
剑指PHP(从入门到进阶)
Laravel(10.x)从入门到精通(十八)
PHP程序员的设计模式
Magento零基础到架构师(系统管理)
Magento零基础到架构师(产品管理)
Laravel(10.x)从入门到精通(二)
Magento零基础到架构师(目录管理)
Laravel(10.x)从入门到精通(十五)
Laravel(10.x)从入门到精通(十七)
Magento中文全栈二次开发
PHP合辑3-数组函数
ThinkPHP项目开发实战