Interface yii\caching\CacheInterface
CacheInterface 是缓存的基础接口。
数据可以通过调用 set() 方法存入缓存中,而后(在同一个请求或不同的请求)可以调用 get() 方法再次获得这个数据。在这两个操作中, 需要一个指明缓存数据的键。调用 set() 方法时还可以传递过期时间和 dependency 缓存依赖。如果在调用 get() 方法时缓存时间过期或者缓存依赖发生变化, 那么缓存不会返回数据。
典型的缓存使用模式就像下面这样:
$key = 'demo';
$data = $cache->get($key);
if ($data === false) {
// ...generate $data here...
$cache->set($key, $data, $duration, $dependency);
}
因为 CacheInterface 继承了 ArrayAccess 接口,可以像数组那样使用它,比如,
$cache['foo'] = 'some data';
echo $cache['foo'];
在 Cache 上更多的详情和详细的使用信息,请参考 guide article on caching。
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
add() | 如果对应缓存键不存在,那么把由它指明的缓存数据存入缓存中, 如果缓存键存在,那么什么也不会做。 | yii\caching\CacheInterface |
buildKey() | 根据给定的字符串构建一个标准化的缓存键。 | yii\caching\CacheInterface |
delete() | 根据指定的键从缓存中删除数据值。 | yii\caching\CacheInterface |
exists() | 检测指定的键是否存在缓存中。 如果缓存数据量大的话,这比从缓存中直接获取值稍快些。 如果当前环境的缓存系统不支持该特性,该方法将会尝试模拟实现该特性, 但是相比直接从缓存中获取数据在性能上没有什么提高。 注意,缓存数据如果有关联的依赖存在,并且确实发生了变化, 但是该方法不会检测缓存依赖的变化情况。所以有可能调用 get() 方法返回 false, 而调用该方法返回 true。 | yii\caching\CacheInterface |
flush() | 从缓存中删除所有的值。 如果缓存系统在多个应用中共享的话,请谨慎执行该操作。 | yii\caching\CacheInterface |
get() | 根据指定的键从缓存中获取数据。 | yii\caching\CacheInterface |
getOrSet() | 联合了 set() 和 get() 两个方法的大方法,可以根据 $key 获取值, 或者在 $key 对应的缓存数据不存在的情况下,存入 $callable 执行后的结果作为缓存数据。 | yii\caching\CacheInterface |
multiAdd() | 存入多个数据到缓存中。每个数据项都包含缓存键和对应的缓存值。 如果缓存中已经存在了对应的键,那么这个存在的缓存值和过期时间将会继续保留。 | yii\caching\CacheInterface |
multiGet() | 根据多个缓存的键一次从缓存中获取多个对应的缓存数据。 一些缓存驱动(比如 memcache,apc)允许一次性获取多个缓存数据,这无疑会提高性能。 如果当前环境的缓存系统不支持该特性的话, 该方法也会尝试模拟实现。 | yii\caching\CacheInterface |
multiSet() | 存入多个数据到缓存中。每个数据项都包含缓存键和对应的缓存值。 如果相同的键已经存在缓存中,那么之前的缓存数据和过期时间, 将会被新的缓存数据和缓存时间分别替换。 | yii\caching\CacheInterface |
set() | 根据键存入缓存值。 如果相同的键已经存在缓存中,那么之前的缓存数据和过期时间, 将会被新的缓存数据和缓存时间分别替换。 | yii\caching\CacheInterface |
方法详情
如果对应缓存键不存在,那么把由它指明的缓存数据存入缓存中, 如果缓存键存在,那么什么也不会做。
public abstract boolean add($key, $value, $duration = 0, $dependency = null) | ||
$key | mixed | 指明缓存值的键。可以是一个简单的字符串, 或者是一个包含着缓存键的复杂数据结构。 |
$value | mixed | 要缓存的值。 |
$duration | integer | 缓存数据过期的秒数,0 意味着永不过期。 |
$dependency | yii\caching\Dependency | 缓存数据的依赖。如果依赖发生变化, 那么使用 get() 方法获取对应的缓存数据时将是无效的。 如果 \yii\caching\serializer 是 false 的话,该参数将会被忽略。 |
return | boolean | 数据是否成功存入缓存。 |
---|
根据给定的字符串构建一个标准化的缓存键。
如果给定的字符串只包含字母和数字,且长度不超过 32 个字符, 那么缓存键就是增加了 \yii\caching\keyPrefix 前缀的字符串。否则,给定的字符串 会经过序列化,应用 MD5 散列,然后再增加 \yii\caching\keyPrefix 前缀生成标准的缓存键。
public abstract string buildKey($key) | ||
$key | mixed | 需要标准化的键。 |
return | string | 生成的缓存键。 |
---|
根据指定的键从缓存中删除数据值。
public abstract boolean delete($key) | ||
$key | mixed | 指明要删除的缓存值的键。可以是一个简单的字符串, 或者是一个包含着缓存键的复杂数据结构。 |
return | boolean | 如果删除过程没有发生错误。 |
---|
检测指定的键是否存在缓存中。 如果缓存数据量大的话,这比从缓存中直接获取值稍快些。 如果当前环境的缓存系统不支持该特性,该方法将会尝试模拟实现该特性, 但是相比直接从缓存中获取数据在性能上没有什么提高。 注意,缓存数据如果有关联的依赖存在,并且确实发生了变化, 但是该方法不会检测缓存依赖的变化情况。所以有可能调用 get() 方法返回 false, 而调用该方法返回 true。
public abstract boolean exists($key) | ||
$key | mixed | 指明缓存值的键。可以是一个简单的字符串, 或者是一个包含着缓存键的复杂数据结构。 |
return | boolean | 如果缓存值存在返回 true,如果缓存值不存在或者已经过期则返回 false。 |
---|
从缓存中删除所有的值。 如果缓存系统在多个应用中共享的话,请谨慎执行该操作。
public abstract boolean flush() | ||
return | boolean | 是否冲刷缓存过程是成功地。 |
---|
根据指定的键从缓存中获取数据。
public abstract mixed get($key) | ||
$key | mixed | 指明缓存值的键。可以是一个简单的字符串, 或者是一个包含着缓存键的复杂数据结构。 |
return | mixed | 缓存中的值,如果缓存值不存在, 缓存已经过期或者和缓存数据相关的缓存依赖发生了变化则返回 false。 |
---|
联合了 set() 和 get() 两个方法的大方法,可以根据 $key 获取值, 或者在 $key 对应的缓存数据不存在的情况下,存入 $callable 执行后的结果作为缓存数据。
使用实例:
public function getTopProducts($count = 10) {
$cache = $this->cache; // Could be Yii::$app->cache
return $cache->getOrSet(['top-n-products', 'n' => $count], function ($cache) use ($count) {
return Products::find()->mostPopular()->limit($count)->all();
}, 1000);
}
public abstract mixed getOrSet($key, $callable, $duration = null, $dependency = null) | ||
$key | mixed | 指明缓存值的键。可以是一个简单的字符串, 或者是一个包含着缓存键的复杂数据结构。 |
$callable | callable|Closure | 用来生成缓存数据的回调或者匿名函数。
如果 $callable 返回 |
$duration | integer | 以秒为单位的缓存数据的过期时间,如果没有传递该参数, 默认使用 \yii\caching\defaultDuration。 |
$dependency | yii\caching\Dependency | 缓存数据的依赖。如果依赖发生变化,
那么使用 get() 方法获取对应的缓存数据时将是无效的。
如果 \yii\caching\serializer 是 |
return | mixed | $callable 的执行结果。 |
---|
存入多个数据到缓存中。每个数据项都包含缓存键和对应的缓存值。 如果缓存中已经存在了对应的键,那么这个存在的缓存值和过期时间将会继续保留。
public abstract array multiAdd($items, $duration = 0, $dependency = null) | ||
$items | array | 要缓存的数据项,作为键值对。 |
$duration | integer | 缓存数据过期的秒数,0 意味着永不过期。 |
$dependency | yii\caching\Dependency | 缓存数据的依赖。如果依赖发生变化, 那么使用 get() 方法获取对应的缓存数据时将是无效的。 如果 \yii\caching\serializer 是 false 的话,该参数将会被忽略。 |
return | array | 未能存入缓存的键列表。 |
---|
根据多个缓存的键一次从缓存中获取多个对应的缓存数据。 一些缓存驱动(比如 memcache,apc)允许一次性获取多个缓存数据,这无疑会提高性能。 如果当前环境的缓存系统不支持该特性的话, 该方法也会尝试模拟实现。
public abstract array multiGet($keys) | ||
$keys | string[] | 指明多个缓存数据的字符串键列表。 |
return | array | 对应缓存键列表的缓存数据,返回的数组格式是 (key, value)键值对。 如果缓存值不存在或者缓存过期,那么对应的缓存值将会是 false。 |
---|
存入多个数据到缓存中。每个数据项都包含缓存键和对应的缓存值。 如果相同的键已经存在缓存中,那么之前的缓存数据和过期时间, 将会被新的缓存数据和缓存时间分别替换。
public abstract array multiSet($items, $duration = 0, $dependency = null) | ||
$items | array | 要缓存的数据项,作为键值对。 |
$duration | integer | 缓存数据过期的秒数,0 意味着永不过期。 |
$dependency | yii\caching\Dependency | 缓存数据的依赖。如果依赖发生变化, 那么使用 get() 方法获取对应的缓存数据时将是无效的。 如果 \yii\caching\serializer 是 false 的话,该参数将会被忽略。 |
return | array | 未能存入缓存的键列表。 |
---|
根据键存入缓存值。 如果相同的键已经存在缓存中,那么之前的缓存数据和过期时间, 将会被新的缓存数据和缓存时间分别替换。
public abstract boolean set($key, $value, $duration = null, $dependency = null) | ||
$key | mixed | 指明缓存值的键。可以是一个简单的字符串, 或者是一个包含着缓存键的复杂数据结构。 |
$value | mixed | 要缓存的值。 |
$duration | integer | 以秒为单位的缓存数据的过期时间,如果没有传递该参数, 默认使用 \yii\caching\defaultDuration。 |
$dependency | yii\caching\Dependency | 缓存数据的依赖。如果依赖发生变化, 那么使用 get() 方法获取对应的缓存数据时将是无效的。 如果 \yii\caching\serializer 是 false 的话,该参数将会被忽略。 |
return | boolean | 数据是否成功存入缓存。 |
---|