这里只是简单讲一下用法,如果想更详细的了解,去看 官方手册 比较好。
数据缓存是指将一些 PHP 变量存储到缓存中,使用时再从缓存中取回。 它也是更高级缓存特性的基础,例如查询缓存 和内容缓存。
数据缓存需要缓存组件提供支持,它代表各种缓存存储器, 例如内存,文件,数据库。
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
// 上面这种是Yii默认的缓存方式,标准文件缓存数据,当然也可以使用其他方式,如:
// 'class' => 'yii\caching\MemCache',
// 'class' => 'yii\caching\ApcCache',
],
]
Yii::$app->cache->get($key)
尝试从缓存中取回数据而不用担心 Yii::$app->cache
可能是 null
。memcache
和 memcached
扩展。 这个选项被看作分布式应用环境中(例如:多台服务器, 有负载均衡等)最快的缓存方案。Redis
键值对存储器 的缓存组件(需要 redis 2.6.12 及以上版本的支持 )。// 加载缓存组件
$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();
默认情况下,缓存中的数据会永久存留,除非它被某些缓存策略强制移除(例如: 缓存空间已满,最老的数据会被移除)。要想改变此特性,可以使用 yii\caching\Cache::add()
和 yii\caching\Cache::set()
的第三个参数来改变。
// 加载缓存组件
$cache = \Yii::$app->cache;
// 默认该缓存在20秒之后过期
$cache->add('name','zhangsan',20);
// 同样
$cache->set('name','zhangsan',20);
除了超时设置,缓存数据还可能受到缓存依赖的影响而失效。我们可以使用 yii\caching\Cache::add()
和 yii\caching\Cache::set()
的第四个参数来设置。
// 加载组件
$cache = \Yii::$app->cache;
// 文件依赖
$dependency = new \yii\caching\FileDependency(['fileName'=>'robots.txt']);
// 如果 robots.txt 被修改,该缓存也立刻失效
$cache->add('the', 'hello world!', 3000, $dependency);
$result = $cache->get('the');
// 表达式依赖
$dependency = new \yii\caching\ExpressionDependency(
['expression' => '\Yii::$app->request->get("name")']
);
// 这里使用的表达式是获取$_GET['name']的值,如果值改变,该缓存失效
$cache->add('two', 'hello world!', 3000, $dependency);
$result = $cache->get('two');
// 数据库依赖
$dependency = new \yii\caching\DbDependency(
['sql' => 'SELECT count(*) FROM test.user']
);
// 当数据库字段发生变化时,该缓存失效
$cache->add('three', 'hello world!', 3000, $dependency);
$result = $cache->get('three');