CCache
| Пакет | system.caching |
|---|---|
| Наследование | абстрактный класс CCache » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent, ICache, ArrayAccess |
| Подклассы | CApcCache, CDbCache, CEAcceleratorCache, CFileCache, CMemCache, CRedisCache, CWinCache, CXCache, CZendDataCache |
| С версии | 1.0 |
| Исходный код | framework/caching/CCache.php |
Элемент данных может быть сохранён в кэше с помощью вызова set и извлечён позднее с помощью get. В обеих операциях требуется ключ, идентифицирующий элемент данных. При вызове set также можно указать время истечения срока действия и/или зависимость. Если элемент данных истекает или зависимость изменяется, вызов get не вернёт элемент данных.
Обратите внимание, что кэш по определению не гарантирует существование значения, даже если оно не истекло. Кэш не предназначен для постоянного хранения.
CCache реализует интерфейс ICache со следующими методами:
- get : извлекает значение по ключу (если оно существует) из кэша
- set : сохраняет значение по ключу в кэше
- add : сохраняет значение только если в кэше нет ключа
- delete : удаляет значение по заданному ключу из кэша
- flush : удаляет все значения из кэша
Подклассы должны реализовать следующие методы:
- getValue
- setValue
- addValue
- deleteValue
- getValues (необязательно)
- flushValues (необязательно)
- serializer (необязательно)
CCache также реализует ArrayAccess, поэтому его можно использовать как массив.
Свойства
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| behaviors | массив | поведения, которые должны быть прикреплены к данному компоненту. | CApplicationComponent |
| hashKey | boolean | нужно ли md5-хешировать ключ кэша для целей нормализации. | CCache |
| isInitialized | boolean | Проверяет, был ли инициализирован данный компонент приложения. | CApplicationComponent |
| keyPrefix | строка | строка, которая добавляется в префикс к каждому ключу кэша для уникальности. | CCache |
| serializer | массив|boolean | функции, используемые для сериализации и десериализации кэшированных данных. | CCache |
Методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| add() | Сохраняет значение, идентифицируемое ключом, в кэше, если в кэше нет этого ключа. | CCache |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Прикрепляет поведение к компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик события к событию. | CComponent |
| canGetProperty() | Определяет, можно ли считать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| delete() | Удаляет значение с указанным ключом из кэша. | CCache |
| detachBehavior() | Открепляет поведение от компонента. | CComponent |
| detachBehaviors() | Открепляет все поведения от компонента. | CComponent |
| detachEventHandler() | Открепляет существующий обработчик события. | CComponent |
| disableBehavior() | Отключает присоединённое поведение. | CComponent |
| disableBehaviors() | Отключает все присоединённые поведения к данному компоненту. | CComponent |
| enableBehavior() | Включает присоединённое поведение. | CComponent |
| enableBehaviors() | Включает все присоединённые к компоненту поведения. | CComponent |
| evaluateExpression() | Вычисляет выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| flush() | Удаляет все значения из кэша. | CCache |
| get() | Извлекает значение из кэша по указанному ключу. | CCache |
| getEventHandlers() | Возвращает список присоединённых обработчиков событий для события. | CComponent |
| getIsInitialized() | Проверяет, был ли инициализирован данный компонент приложения. | CApplicationComponent |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, имеются ли присоединённые обработчики для указанного события. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует компонент приложения. | CCache |
| mget() | Извлекает несколько значений из кэша по указанным ключам. | CCache |
| offsetExists() | Возвращает, существует ли запись кэша с указанным ключом. | CCache |
| offsetGet() | Извлекает значение из кэша по указанному ключу. | CCache |
| offsetSet() | Сохраняет значение, идентифицируемое ключом, в кэше. | CCache |
| offsetUnset() | Удаляет значение с указанным ключом из кэша. | CCache |
| raiseEvent() | Вызывает событие. | CComponent |
| set() | Сохраняет значение, идентифицируемое ключом, в кэше. | CCache |
Защищенные методы
| Метод | Описание | Определено в |
|---|---|---|
| addValue() | Сохраняет значение, идентифицируемое ключом, в кэше, если кэш не содержит этот ключ. | CCache |
| deleteValue() | Удаляет значение с указанным ключом из кэша | CCache |
| flushValues() | Удаляет все значения из кэша. | CCache |
| generateUniqueKey() | CCache | |
| getValue() | Извлекает значение из кэша по указанному ключу. | CCache |
| getValues() | Извлекает несколько значений из кэша по указанным ключам. | CCache |
| setValue() | Сохраняет значение, идентифицируемое ключом, в кэше. | CCache |
Подробное описание свойств
hashKey свойство (доступно начиная с v1.1.11)
public boolean $hashKey;
указывает, нужно ли md5-хешировать ключ кэша для нормализации. По умолчанию значение true. Установка этого свойства в false гарантирует, что ключ кэша не будет изменён при вызове соответствующих методов get(), set(), add() и delete(). Это полезно, если приложение Yii, а также внешнее приложение, нуждаются в доступе к одному и тому же пулу кэша (также см. описание keyPrefix по этому вопросу). Однако без нормализации необходимо убедиться, что соответствующий кэш-бекенд поддерживает структуру (кодировка символов, длина и т. д.) всех предоставленных ключей кэша, в противном случае может произойти непредвиденное поведение.
keyPrefix свойство
public string $keyPrefix;
строка, добавляемая в качестве префикса к каждому ключу кэша для обеспечения уникальности. По умолчанию значение null, что означает использование идентификатора приложения application ID. Если разные приложения нуждаются в доступе к одному и тому же пулу кэшированных данных, для каждого из приложений явно должен быть задан одинаковый префикс.
serializer свойство
public array|boolean $serializer;
функции, используемые для сериализации и десериализации кэшированных данных. По умолчанию значение null, что означает использование стандартных PHP функций `serialize()` и `unserialize()`. Если вы хотите использовать более эффективный сериализатор (например, igbinary), вы можете настроить это свойство с помощью массива из двух элементов. Первый элемент задаёт функцию сериализации, а второй — функцию десериализации. Если это свойство установлено в false, данные будут напрямую отправлены и извлечены из базового компонента кэша без какой-либо сериализации или десериализации. Не следует отключать сериализацию, если вы используете зависимость кэша, так как она зависит от сериализации данных.
Подробное описание методов
add() метод
public boolean add(string $id, mixed $value, integer $expire=0, ICacheDependency $dependency=NULL) | ||
| $id | string | ключ, определяющий значение для кэширования |
| $value | mixed | значение для кэширования |
| $expire | integer | количество секунд, в течение которых кэшированное значение будет храниться. 0 означает, что значение никогда не истекает. |
| $dependency | ICacheDependency | зависимость кэшированного элемента. Если зависимость изменяется, элемент помечается как недействительный. |
| {return} | boolean | true, если значение успешно сохранено в кэше, иначе false |
public function add($id,$value,$expire=0,$dependency=null)
{
Yii::trace('Adding "'.$id.'" to cache','system.caching.'.get_class($this));
if ($dependency !== null && $this->serializer !== false)
$dependency->evaluateDependency();
if ($this->serializer === null)
$value = serialize(array($value,$dependency));
elseif ($this->serializer !== false)
$value = call_user_func($this->serializer[0], array($value,$dependency));
return $this->addValue($this->generateUniqueKey($id), $value, $expire);
}
Сохраняет значение, идентифицируемое ключом, в кэше, если кэш не содержит этот ключ. Ничего не делается, если кэш уже содержит ключ.
addValue() метод
protected boolean addValue(string $key, string $value, integer $expire) | ||
| $key | string | ключ, определяющий значение для кэширования |
| $value | string | значение для кэширования |
| $expire | integer | количество секунд, в течение которых кэшированное значение будет храниться. 0 означает, что значение никогда не истекает. |
| {return} | boolean | true, если значение успешно сохранено в кэше, иначе false |
protected function addValue($key,$value,$expire)
{
throw new CException(Yii::t('yii','{className} does not support add() functionality.',
array('{className}'=>get_class($this))));
}
Сохраняет значение, идентифицируемое ключом, в кэше, если кэш не содержит этот ключ. Этот метод должен быть реализован дочерними классами для хранения данных в конкретном кэш-хранилище. Уникальность и зависимость уже обрабатываются в методе add(). Поэтому требуется только реализация хранения данных.
delete() метод
public boolean delete(string $id) | ||
| $id | string | ключ значения, которое нужно удалить |
| {return} | boolean | true, если удаление прошло без ошибок |
public function delete($id)
{
Yii::trace('Deleting "'.$id.'" from cache','system.caching.'.get_class($this));
return $this->deleteValue($this->generateUniqueKey($id));
}
Удаляет значение с указанным ключом из кэша
deleteValue() метод
protected boolean deleteValue(string $key) | ||
| $key | string | ключ значения, которое нужно удалить |
| {return} | boolean | true, если удаление прошло без ошибок |
protected function deleteValue($key)
{
throw new CException(Yii::t('yii','{className} does not support delete() functionality.',
array('{className}'=>get_class($this))));
}
Удаляет значение с указанным ключом из кэша. Этот метод должен быть реализован дочерними классами для удаления данных из фактического хранилища кэша.
flush() метод
public boolean flush() | ||
| {return} | boolean | true, если операция очистки прошла успешно. |
public function flush()
{
Yii::trace('Flushing cache','system.caching.'.get_class($this));
return $this->flushValues();
}
Удаляет все значения из кэша. Будьте осторожны при выполнении этой операции, если кэш используется несколькими приложениями.
flushValues() метод (доступно начиная с v1.1.5)
protected boolean flushValues() | ||
| {return} | boolean | true, если операция очистки прошла успешно. |
protected function flushValues()
{
throw new CException(Yii::t('yii','{className} does not support flushValues() functionality.',
array('{className}'=>get_class($this))));
}
Удаляет все значения из кэша. Дочерние классы могут реализовать этот метод для выполнения операции очистки.
generateUniqueKey() метод
protected string generateUniqueKey(string $key) | ||
| $key | string | ключ, определяющий кэшируемое значение |
| {return} | string | сгенерированный ключ из предоставленного ключа, который обеспечивает уникальность в различных приложениях |
protected function generateUniqueKey($key)
{
return $this->hashKey ? md5($this->keyPrefix.$key) : $this->keyPrefix.$key;
}
get() метод
public mixed get(string $id) | ||
| $id | string | ключ, определяющий кэшированное значение |
| {return} | mixed | значение, сохранённое в кэше; false, если значение отсутствует в кэше, истекло или зависимость изменилась. |
public function get($id)
{
$value = $this->getValue($this->generateUniqueKey($id));
if($value===false || $this->serializer===false)
return $value;
if($this->serializer===null)
$value=unserialize($value);
else
$value=call_user_func($this->serializer[1], $value);
if(is_array($value) && (!$value[1] instanceof ICacheDependency || !$value[1]->getHasChanged()))
{
Yii::trace('Serving "'.$id.'" from cache','system.caching.'.get_class($this));
return $value[0];
}
else
return false;
}
Извлекает значение из кэша по указанному ключу.
getValue() метод
protected string|boolean getValue(string $key) | ||
| $key | string | уникальный ключ, идентифицирующий кэшированное значение |
| {return} | string|boolean | значение, хранящееся в кэше; false, если значение отсутствует в кэше или истекло срок его действия. |
protected function getValue($key)
{
throw new CException(Yii::t('yii','{className} does not support get() functionality.',
array('{className}'=>get_class($this))));
}
Извлекает значение из кэша по указанному ключу. Этот метод должен быть реализован дочерними классами для извлечения данных из конкретного хранилища кэша. Уникальность и зависимость уже обрабатываются в методе get(). Поэтому требуется только реализация извлечения данных.
getValues() метод
protected array getValues(array $keys) | ||
| $keys | array | список ключей, идентифицирующих кэшированные значения |
| {return} | array | список кэшированных значений, индексированных по ключам |
protected function getValues($keys)
{
$results=array();
foreach($keys as $key)
$results[$key]=$this->getValue($key);
return $results;
}
Извлекает несколько значений из кэша по заданным ключам. Реализация по умолчанию просто многократно вызывает метод getValue для извлечения кэшированных значений по одному. Если хранилище кэша поддерживает multiget, этот метод следует переопределить для использования этой функции.
init() метод
public void init() |
public function init()
{
parent::init();
if($this->keyPrefix===null)
$this->keyPrefix=Yii::app()->getId();
}
Инициализирует компонент приложения. Этот метод переопределяет реализацию родительского класса, задавая префикс ключа кэша по умолчанию.
mget() метод
public array mget(array $ids) | ||
| $ids | array | список ключей, идентифицирующих кэшированные значения |
| {return} | array | список кэшированных значений, соответствующих заданным ключам. Массив возвращается в виде пар (ключ, значение). Если значение не кэшировано или срок его действия истек, соответствующее значение массива будет false. |
public function mget($ids)
{
$uids = array();
foreach ($ids as $id)
$uids[$id] = $this->generateUniqueKey($id);
$values = $this->getValues($uids);
$results = array();
if($this->serializer === false)
{
foreach ($uids as $id => $uid)
$results[$id] = isset($values[$uid]) ? $values[$uid] : false;
}
else
{
foreach($uids as $id => $uid)
{
$results[$id] = false;
if(isset($values[$uid]))
{
$value = $this->serializer === null ? unserialize($values[$uid]) : call_user_func($this->serializer[1], $values[$uid]);
if(is_array($value) && (!$value[1] instanceof ICacheDependency || !$value[1]->getHasChanged()))
{
Yii::trace('Serving "'.$id.'" from cache','system.caching.'.get_class($this));
$results[$id] = $value[0];
}
}
}
}
return $results;
}
Извлекает несколько значений из кэша по заданным ключам. Некоторые кэши (например, memcache, apc) позволяют извлекать несколько кэшированных значений за один раз, что может повысить производительность, так как уменьшает затраты на взаимодействие. В случае, если кэш не поддерживает эту функцию, этот метод будет ее моделировать.
offsetExists() метод
public boolean offsetExists(string $id) | ||
| $id | string | ключ, идентифицирующий кэшированное значение |
| {return} | boolean | |
public function offsetExists($id)
{
return $this->get($id)!==false;
}
Возвращает значение, есть ли запись в кэше с указанным ключом. Этот метод требуется интерфейсом ArrayAccess.
offsetGet() метод
public mixed offsetGet(string $id) | ||
| $id | string | ключ, идентифицирующий кэшированное значение |
| {return} | mixed | значение, хранящееся в кэше; false, если значение отсутствует в кэше или истек срок его действия. |
public function offsetGet($id)
{
return $this->get($id);
}
Извлекает значение из кэша по заданному ключу. Этот метод требуется интерфейсом ArrayAccess.
offsetSet() метод
public void offsetSet(string $id, mixed $value) | ||
| $id | string | ключ, идентифицирующий значение для кэширования |
| $value | mixed | значение для кэширования |
public function offsetSet($id, $value)
{
$this->set($id, $value);
}
Хранит значение, идентифицируемое ключом, в кэше. Если кэш уже содержит такой ключ, существующее значение будет заменено новым. Для добавления срока действия и зависимостей используйте метод set(). Этот метод требуется интерфейсом ArrayAccess.
offsetUnset() метод
public boolean offsetUnset(string $id) | ||
| $id | string | ключ удаляемого значения |
| {return} | boolean | true, если удаление прошло успешно, иначе false |
public function offsetUnset($id)
{
$this->delete($id);
}
Удаляет значение с указанным ключом из кэша. Этот метод требуется интерфейсом ArrayAccess.
set() метод
public boolean set(string $id, mixed $value, integer $expire=0, ICacheDependency $dependency=NULL) | ||
| $id | string | ключ, идентифицирующий значение для кэширования |
| $value | mixed | значение для кэширования |
| $expire | integer | количество секунд, в течение которых кэшированное значение будет действовать. 0 означает, что срок действия не ограничен. |
| $dependency | ICacheDependency | зависимость от кэшируемого элемента. Если зависимость изменяется, элемент помечается как недействительный. |
| {return} | boolean | true, если значение успешно сохранено в кэше, иначе false. |
public function set($id,$value,$expire=0,$dependency=null)
{
Yii::trace('Saving "'.$id.'" to cache','system.caching.'.get_class($this));
if ($dependency !== null && $this->serializer !== false)
$dependency->evaluateDependency();
if ($this->serializer === null)
$value = serialize(array($value,$dependency));
elseif ($this->serializer !== false)
$value = call_user_func($this->serializer[0], array($value,$dependency));
return $this->setValue($this->generateUniqueKey($id), $value, $expire);
}
Хранит значение, идентифицируемое ключом, в кэше. Если кэш уже содержит такой ключ, существующее значение и срок действия будут заменены новыми.
setValue() метод
protected boolean setValue(string $key, string $value, integer $expire) | ||
| $key | string | ключ, идентифицирующий значение для кэширования |
| $value | string | значение для кэширования |
| $expire | integer | количество секунд, в течение которых кэшированное значение будет действовать. 0 означает, что срок действия не ограничен. |
| {return} | boolean | true, если значение успешно сохранено в кэше, иначе false. |
protected function setValue($key,$value,$expire)
{
throw new CException(Yii::t('yii','{className} does not support set() functionality.',
array('{className}'=>get_class($this))));
}
Сохраняет значение, идентифицируемое ключом, в кэше. Этот метод должен быть реализован дочерними классами для хранения данных в конкретном хранилище кэша. Уникальность и зависимость уже обрабатываются в методе set(). Поэтому нужна только реализация хранения данных.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CCache