数据缓存需要缓存组件提供支持,它代表各种缓存存储器, 例如内存,文件,数据库。 'components' => [ 'cache' => [ 'class' => 'yiicachingFileCache', // 上面这种是Yii默认的缓存方式,标准文件缓存数据,当然也可以使用其他方式,如: // 'class' => 'yiicachingMemCache', // 'class' => 'yiicachingApcCache', ], ]
支持的缓存方式 yiicachingApcCache:使用 PHP APC 扩展。这个选项可以 认为是集中式应用程序环境中(例如:单一服务器, 没有独立的负载均衡器等)最快的缓存方案。 yiicachingDbCache:使用一个数据库的表存储缓存数据。要使用这个缓存,你必须 创建一个与 yiicachingDbCache::cacheTable 对应的表。 yiicachingDummyCache:仅作为一个缓存占位符,不实现任何真正的缓存功能。 这个组件的目的是为了简化那些需要查询缓存有效性的代码。
例如,在开发中如果服务器没有实际的缓存支持,用它配置 一个缓存组件。一个真正的缓存服务启用后,可以再切换为使用相应的缓存组件。
两种条件下你都可以使用同样的代码 Yii::$app->cache->get($key) 尝试从缓存中取回数据而不用担心 Yii::$app->cache 可能是 null。 yiicachingFileCache:使用标准文件存储缓存数据。这个特别适用于 缓存大块数据,例如一个整页的内容。 yiicachingMemCache:使用 PHP memcache 和 memcached 扩展。 这个选项被看作分布式应用环境中(例如:多台服务器, 有负载均衡等)最快的缓存方案。 yii edisCache:实现了一个基于 Redis 键值对存储器 的缓存组件(需要 redis 2.6.12 及以上版本的支持 )。 yiicachingWinCache:使用 PHP WinCache (另可参考 )扩展。 yiicachingXCache:使用 PHP XCache扩展。 yiicachingendDataCache:使用 Zend Data Cache 作为底层缓存媒介。 缓存的增删改查示例 // 加载缓存组件 $cache = Yii::$app->cache; // 添加一个缓存 $cache->add('name','zhangsan'); // 更改一个缓存 $cache->set('name' , 'lisi'); // 删除一个缓存 $cache->delete('name'); // 获取缓存内容 $cache->get('name') // 查看缓存是否存在 if($cache->exists('name')){ echo '存在'; } // 同时增加多个缓存 $cache->madd(['name' => 'zhangsan' , 'age' => 18]); // 同时获取多个缓存 var_dump($cache->mget(['name' , 'age'])); // 清空缓存 $cache->flush(); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 设置缓存有效期 默认情况下,缓存中的数据会永久存留,除非它被某些缓存策略强制移除(例如: 缓存空间已满,最老的数据会被移除)。要想改变此特性,可以使用 yiicachingCache::add() 和 yiicachingCache::set() 的第三个参数来改变。 // 加载缓存组件 $cache = Yii::$app->cache; // 默认该缓存在20秒之后过期 $cache->add('name','zhangsan',20); // 同样 $cache->set('name','zhangsan',20); 1 2 3 4 5 6 1 2 3 4 5 6 缓存依赖 除了超时设置,缓存数据还可能受到缓存依赖的影响而失效。我们可以使用 yiicachingCache::add() 和 yiicachingCache::set() 的第四个参数来设置。 // 加载组件 $cache = Yii::$app->cache; // 文件依赖 $dependency = new yiicachingFileDependency(['fileName'=>'robots.txt']); // 如果 robots.txt 被修改,该缓存也立刻失效 $cache->add('the', 'hello world!', 3000, $dependency); $result = $cache->get('the'); // 表达式依赖 $dependency = new yiicachingExpressionDependency( ['expression' => 'Yii::$app->request->get("name")'] ); // 这里使用的表达式是获取$_GET['name']的值,如果值改变,该缓存失效 $cache->add('two', 'hello world!', 3000, $dependency); $result = $cache->get('two'); // 数据库依赖 $dependency = new yiicachingDbDependency( ['sql' => 'SELECT count(*) FROM test.user'] ); // 当数据库字段发生变化时,该缓存失效 $cache->add('three', 'hello world!', 3000, $dependency); $result = $cache->get('three');