Yii框架缓存机制怎么配置_Yii框架Redis和文件缓存使用方法汇总【汇总】

星浩同学_8819

星浩同学_8819

2026-04-23

898人浏览

原创

yii缓存需显式配置组件并挂载为'cache'键,支持filecache和rediscache等类型,后者要求redis扩展及服务可用;$cache->get()返回false多因存储不可用或key不匹配;pagecache需在behaviors中声明且满足响应条件;fragmentcache需注意key唯一性和上下文隔离;缓存更新需手动清理或用tag机制。

yii框架缓存机制怎么配置_yii框架redis和文件缓存使用方法汇总【汇总】

Yii 框架缓存不是“开个开关就生效”,必须显式配置组件、显式调用方法,且不同缓存类型对环境和依赖有硬性要求——比如 yii\redis\Cache 要求 PHP 安装 redis 扩展且 Redis 服务可连,yii\caching\FileCache 则依赖 runtime/cache/ 目录可写。

如何在 config/web.php 中正确注册 cache 组件

缓存组件必须挂载在 'components' 数组下,且键名固定为 'cache'(框架内部硬编码查找)。类名决定行为,不能拼错:

  • 'cache' => ['class' => 'yii\caching\FileCache']:最轻量,适合开发或单机小流量,缓存文件落在 @runtime/cache/ 下,注意该目录需有写权限
  • 'cache' => ['class' => 'yii\redis\Cache', 'redis' => ['hostname' => 'localhost', 'port' => 6379, 'database' => 0]]:必须确保 redis 扩展已启用,且连接参数与实际 Redis 实例一致;database 值超出范围会静默失败(如 Redis 配置只允许 db 0–15,却设为 16)
  • 集群模式要换用 'class' => 'yii\redis\Cache' + 'clusters' 配置项,不能复用单点的 'redis' 键,否则报 Invalid Configuration – yii\base\InvalidConfigException

为什么 $cache->get() 总是返回 false

这不是代码写错了,大概率是底层存储不可用或 key 不匹配。常见原因包括:

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 缓存组件未成功初始化:检查 Yii::$app->cache 是否为 null,或抛出 InvalidConfigException 异常(常因扩展缺失或连接超时)
  • key 被自动加了前缀但你没意识到:yii\redis\Cache 默认不加前缀,但若配置了 'keyPrefix' => 'myapp_',那么 $cache->get('user_list') 实际查的是 myapp_user_list,而你可能用 redis-cli 直接 set 的是裸 key
  • 序列化失败:缓存值含闭包、资源句柄或未定义类实例时,set() 会静默失败(FileCache 尤其明显),建议先 var_dump(serialize($data)) 确认可序列化

页面缓存(PageCache)为什么没生效

PageCache 是控制器级过滤器,它绕过整个 action 执行,所以必须满足三个条件才起作用:

  • 过滤器必须在 behaviors() 中声明,且 'class' 值为 'yii\filters\PageCache'(注意不是 yii\caching\PageCache,后者不存在)
  • 'only' 指定的动作必须是当前请求匹配的,比如配了 ['index'] 却访问 /site/about,自然不触发
  • 响应必须是 200 状态且 Content-Type 为 text/html;如果 action 内部调用了 Yii::$app->response->statusCode = 404 或输出了 JSON,PageCache 会自动跳过
  • 默认不缓存带 GET 参数的请求(如 ?id=123),需显式配置 'variations' => ['GET'] 或指定具体参数名

片段缓存(Fragment Cache)中 begin()/end() 的坑

片段缓存写在视图里,看着简单,但容易忽略上下文隔离问题:

  • beginCache() 的第一个参数是 cache key,**必须唯一且稳定**;如果 key 含动态变量(如 'user_'.$id.'_profile')但 $id 在某些场景下未定义,会导致 key 变成 user__profile,和其他用户混用缓存
  • 缓存内容包含 PHP 输出(如 echo $model->name)没问题,但**不能包含 exit/die 或修改全局状态的代码**(如 Yii::$app->user->login()),因为缓存命中时这些代码根本不执行
  • 嵌套使用时,外层缓存时间不能短于内层,否则可能出现外层已过期重建,但内层仍返回旧数据的情况

缓存最麻烦的从来不是配置语法,而是“什么时候该清”和“谁负责清”。比如用户资料更新后,User::updateAll() 不会自动删掉 user_list 缓存,得手动 Yii::$app->cache->delete('user_list') 或用 tag 机制批量管理——这点文档提得少,但线上事故多源于此。

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4389

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3915

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7132

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6862

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1056

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6078

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习