当前位置:K88软件开发文章中心网站服务器框架Yii 2.0 → 文章内容

数据缓存(Data Caching)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:29:27

,],为了确保互通性,此处只能使用字母和数字。缓存过期默认情况下,缓存中的数据会永久存留,除非它被某些缓存策略强制移除(例如:缓存空间已满,最老的数据会被移除)。要改变此特性,你可以在调用 yii\caching\Cache::set() 存储一项数据时提供一个过期时间参数。该参数代表这项数据在缓存中可保持有效多少秒。当你调用 yii\caching\Cache::get() 取回数据时,如果它已经过了超时时间,该方法将返回 false,表明在缓存中找不到这项数据。例如:// 将数据在缓存中保留 45 秒$cache->set($key, $data, 45);sleep(50);$data = $cache->get($key);if ($data === false) { // $data 已过期,或者在缓存中找不到}缓存依赖除了超时设置,缓存数据还可能受到缓存依赖的影响而失效。例如,yii\caching\FileDependency 代表对一个文件修改时间的依赖。这个依赖条件发生变化也就意味着相应的文件已经被修改。因此,缓存中任何过期的文件内容都应该被置为失效状态,对 yii\caching\Cache::get() 的调用都应该返回 false。缓存依赖用 yii\caching\Dependency 的派生类所表示。当调用 yii\caching\Cache::set() 在缓存中存储一项数据时,可以同时传递一个关联的缓存依赖对象。例如:// 创建一个对 example.txt 文件修改时间的缓存依赖$dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']);// 缓存数据将在30秒后超时// 如果 example.txt 被修改,它也可能被更早地置为失效状态。$cache->set($key, $data, 30, $dependency);// 缓存会检查数据是否已超时。// 它还会检查关联的依赖是否已变化。// 符合任何一个条件时都会返回 false。$data = $cache->get($key);下面是可用的缓存依赖的概况:yii\caching\ChainedDependency:如果依赖链上任何一个依赖产生变化,则依赖改变。yii\caching\DbDependency:如果指定 SQL 语句的查询结果发生了变化,则依赖改变。yii\caching\ExpressionDependency:如果指定的 PHP 表达式执行结果发生变化,则依赖改变。yii\caching\FileDependency:如果文件的最后修改时间发生变化,则依赖改变。yii\caching\GroupDependency:将一项缓存数据标记到一个组名,你可以通过调用 yii\caching\GroupDependency::invalidate() 一次性将相同组名的缓存全部置为失效状态。查询缓存查询缓存是一个建立在数据缓存之上的特殊缓存特性。它用于缓存数据库查询的结果。查询缓存需要一个 yii\db\Connection 和一个有效的?cache?应用组件。查询缓存的基本用法如下,假设?$db?是一个 yii\db\Connection 实例:$duration = 60; // 缓存查询结果60秒$dependency = ...; // 可选的缓存依赖$db->beginCache($duration, $dependency);// ...这儿执行数据库查询...$db->endCache();如你所见,beginCache()?和?endCache()?中间的任何查询结果都会被缓存起来。如果缓存中找到了同样查询的结果,则查询会被跳过,直接从缓存中提取结果。查询缓存可以用于?ActiveRecord?和?DAO。Info: 有些 DBMS (例如:MySQL)也支持数据库服务器端的查询缓存。你可以选择使用任一查询缓存机制。上文所述的查询缓存的好处在于你可以指定更灵活的缓存依赖因此可能更加高效。配置查询缓存有两个通过 yii\db\Connection 设置的配置项:yii\db\Connection::queryCacheDuration: 查询结果在缓存中的有效期,以秒表示。如果在调用 yii\db\Connection::beginCache() 时传递了一个显式的时值参数,则配置中的有效期时值会被覆盖。yii\db\Connection::queryCache: 缓存应用组件的 ID。默认为?'cache'。只有在设置了一个有效的缓存应用组件时,查询缓存才会有效。限制条件当查询结果中含有资源句柄时,查询缓存无法使用。例如,在有些 DBMS 中使用了?BLOB?列的时候,缓存结果会为该数据列返回一个资源句柄。有些缓存存储器有大小限制。例如,memcache 限制每条数据最大为 1MB。因此,如果查询结果的大小超出了该限制,则会导致缓存失败。

上一页  [1] [2] 


数据缓存(Data Caching)