Yii2 cache的用法(1)
数据缓存需要缓存组件提供支持,它代表各种缓存存储器, 例如内存,文件,数据库。 '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的用法(1)的更多相关文章
- Yii2 AR find用法 (2016-05-18 12:06:01)
Yii2 AR find用法 (2016-05-18 12:06:01) 转载▼ User::find()->all(); 返回所有数据 User::findOne($id); ...
- yii2 httpClient的用法
yii2 httpClient的用法示例: <?php /* * @Purpose : yii2 httpClient 请求示例 * @Author : Chrdai * @Time : 201 ...
- Application,Session,Cookie,ViewState,Cache对象用法、作用域的区别
1.Application:用于保存所有用户共用的数据信息.在Asp.Net中类似的配置数据最好保存在Web.config文件中.如果使用Application对象,一个需要考虑的问题是任何写操作都要 ...
- c#Cache的用法
public class Cache { /// <summary> /// 获取数据缓存 /// </summary> /// <param name="ca ...
- .net Cache的用法
HttpContext.Current.Cache 使用方法 .net Cache 怎么使用 /// <summary> /// 简单创建/修改Cache,前提是这个值是字符 ...
- yii2 ActiveRecord常用用法
User::find()->all(); 返回所有数据 User::findOne($id); 返回 主键 id=1 的一条数据 User::find()->where ...
- Yii2常用ActiveRecord用法
1.多表连表查询与对象关联查询 public function getWmsCheck(){ return $this->hasOne(\core\models\WmsCheck::classN ...
- .NET Application,Session,Cookie,ViewState,Cache对象用法
作用域 保存地址 生命周期Application 应用程序 服务器内存 IIS启动Session 整个站点 服务器内存 Session到时 默认20分钟Cashe 应用程序 服务器内存 应用程序的周期 ...
- 细说 ASP.NET Cache 及其高级用法
许多做过程序性能优化的人,或者关注过程程序性能的人,应该都使用过各类缓存技术. 而我今天所说的Cache是专指ASP.NET的Cache,我们可以使用HttpRuntime.Cache访问到的那个Ca ...
随机推荐
- QQ通信原理及QQ是怎么穿透内网进行通信的?
http://blog.csdn.net/frank_good/article/details/51160027 ******************************************* ...
- 【转】更改 shell 终端的默认键绑定为 vi 模式
我们使用的 shell 终端是 bash,它的默认键绑定方式是 emacs 模式.比如键入 Ctrl+a 光标会停在行首,Ctrl+e 光标会停在行尾等等. 如果希望在终端输入时使用 vi 的模式,比 ...
- ctrl+z的ascii码是多少?
今天在使用中移动的模组的时候,发现: 突然把我难住了,ctrl+z要在我的数据包中通过TCP/IP发送,而结束字符肯定是需要我自己加在数据包的末尾的. 故,做如下测试: #include <st ...
- 中南大学oj:1336: Interesting Calculator(广搜经典题目)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1336 There is an interesting calculator. It has 3 r ...
- plsql 安装后database下拉没有东西(转)
转载自:http://www.cnblogs.com/yaobolove/p/5682982.html 今天来说一下问题,就是装了plsql竟然在database这一栏没有东西,我也是纠结了很久,感觉 ...
- Android ListView的使用(二)
上一章使用ListView和ArrayAdapter 进行了最简单的操作. 本文来自文档来自:http://www.runoob.com/w3cnote/android-tutorial-adapte ...
- WPF重写Button样式
首先指定OverridesDefaultStyle属性为True: 然后添加样式: 重写ControlTemplate: <Window.Resources> <Style x:Ke ...
- java获取classpath以外的路径
最近在使用以前写过的代码生成器(从表名可生成所有的代码)的时候,发现生成的文件都在classpath目录下,所有的文件都得自己拷到工程目录下,于是,想优化一下,取得classpath目录以外的路径,很 ...
- Ubuntu 安装 vnc server
安装原因,因为需要有桌面操作, 服务器上配置 vnc 即可实现. 在 ubuntu 14.04 上已经实现. 安装先关软件 sudo apt-get update sudo apt-get insta ...
- if 语句练习 身高体重问题
public class d { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 int ...