zoukankan      html  css  js  c++  java
  • Yii2 cache的用法(1)

    数据缓存需要缓存组件提供支持,它代表各种缓存存储器, 例如内存,文件,数据库。
    
    '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');
  • 相关阅读:
    Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识
    SQL Server和C#中无法将小数字符串直接转换为整数类型
    Is default(CancellationToken) equivalent to CancellationToken.None?(转载)
    Stored Procedures: OUTPUT vs OUT?(转载)
    关于TransactionScope.Complete方法(链接)
    Do I need to dispose of Tasks?(链接)
    EF Core 3.0 Keyless Entity Types (链接)
    为什么C#接口中不能声明async异步函数(转载)
    How does SqlDataReader handle really large queries?(转载)
    ASP.NET Core MVC中的Filter如果不实现IFilterFactory接口,那么Filter默认情况下在ASP.NET Core生命周期内是单例的,会被重用
  • 原文地址:https://www.cnblogs.com/wuheng1991/p/7389623.html
Copyright © 2011-2022 走看看