Yii2 cache的用法
Posted 侠岚之弋痕夕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2 cache的用法相关的知识,希望对你有一定的参考价值。
数据缓存需要缓存组件提供支持,它代表各种缓存存储器, 例如内存,文件,数据库。 ‘components‘ => [ ‘cache‘ => [ ‘class‘ => ‘yii\caching\FileCache‘, // 上面这种是Yii默认的缓存方式,标准文件缓存数据,当然也可以使用其他方式,如: // ‘class‘ => ‘yii\caching\MemCache‘, // ‘class‘ => ‘yii\caching\ApcCache‘, ], ]
支持的缓存方式 yii\caching\ApcCache:使用 php APC 扩展。这个选项可以 认为是集中式应用程序环境中(例如:单一服务器, 没有独立的负载均衡器等)最快的缓存方案。 yii\caching\DbCache:使用一个数据库的表存储缓存数据。要使用这个缓存,你必须 创建一个与 yii\caching\DbCache::cacheTable 对应的表。 yii\caching\DummyCache:仅作为一个缓存占位符,不实现任何真正的缓存功能。 这个组件的目的是为了简化那些需要查询缓存有效性的代码。
例如,在开发中如果服务器没有实际的缓存支持,用它配置 一个缓存组件。一个真正的缓存服务启用后,可以再切换为使用相应的缓存组件。
两种条件下你都可以使用同样的代码 Yii::$app->cache->get($key) 尝试从缓存中取回数据而不用担心 Yii::$app->cache 可能是 null。 yii\caching\FileCache:使用标准文件存储缓存数据。这个特别适用于 缓存大块数据,例如一个整页的内容。 yii\caching\MemCache:使用 PHP memcache 和 memcached 扩展。 这个选项被看作分布式应用环境中(例如:多台服务器, 有负载均衡等)最快的缓存方案。 yii\redis\Cache:实现了一个基于 Redis 键值对存储器 的缓存组件(需要 redis 2.6.12 及以上版本的支持 )。 yii\caching\WinCache:使用 PHP WinCache (另可参考 )扩展。 yii\caching\XCache:使用 PHP XCache扩展。 yii\caching\ZendDataCache:使用 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 设置缓存有效期 默认情况下,缓存中的数据会永久存留,除非它被某些缓存策略强制移除(例如: 缓存空间已满,最老的数据会被移除)。要想改变此特性,可以使用 yii\caching\Cache::add() 和 yii\caching\Cache::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 缓存依赖 除了超时设置,缓存数据还可能受到缓存依赖的影响而失效。我们可以使用 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‘);
以上是关于Yii2 cache的用法的主要内容,如果未能解决你的问题,请参考以下文章