Spec-Zone.ru › Yii 1.1

CCache

Пакет system.caching
Наследование абстрактный класс CCache » CApplicationComponent » CComponent
Реализует IApplicationComponent, ICache, ArrayAccess
Подклассы CApcCache, CDbCache, CEAcceleratorCache, CFileCache, CMemCache, CRedisCache, CWinCache, CXCache, CZendDataCache
С версии 1.0
Исходный код framework/caching/CCache.php
CCache — базовый класс для классов кэша с различной реализацией хранения кэша.

Элемент данных может быть сохранён в кэше с помощью вызова 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
Исходный код: framework/caching/CCache.php#197 (показать)
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
Исходный код: framework/caching/CCache.php#299 (показать)
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, если удаление прошло без ошибок
Исходный код: framework/caching/CCache.php#217 (показать)
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, если удаление прошло без ошибок
Исходный код: framework/caching/CCache.php#312 (показать)
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, если операция очистки прошла успешно.
Исходный код: framework/caching/CCache.php#228 (показать)
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, если операция очистки прошла успешно.
Исходный код: framework/caching/CCache.php#325 (показать)
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 сгенерированный ключ из предоставленного ключа, который обеспечивает уникальность в различных приложениях
Исходный код: framework/caching/CCache.php#92 (показать)
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, если значение отсутствует в кэше, истекло или зависимость изменилась.
Исходный код: framework/caching/CCache.php#102 (показать)
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, если значение отсутствует в кэше или истекло срок его действия.
Исходный код: framework/caching/CCache.php#244 (показать)
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 список кэшированных значений, индексированных по ключам
Исходный код: framework/caching/CCache.php#259 (показать)
protected function getValues($keys)
{
    
$results=array();
    foreach(
$keys as $key)
        
$results[$key]=$this->getValue($key);
    return 
$results;
}

Извлекает несколько значений из кэша по заданным ключам. Реализация по умолчанию просто многократно вызывает метод getValue для извлечения кэшированных значений по одному. Если хранилище кэша поддерживает multiget, этот метод следует переопределить для использования этой функции.

init() метод

public void init()
Исходный код: framework/caching/CCache.php#81 (показать)
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.
Исходный код: framework/caching/CCache.php#130 (показать)
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
Исходный код: framework/caching/CCache.php#337 (показать)
public function offsetExists($id)
{
    return 
$this->get($id)!==false;
}

Возвращает значение, есть ли запись в кэше с указанным ключом. Этот метод требуется интерфейсом ArrayAccess.

offsetGet() метод

public mixed offsetGet(string $id)
$id string ключ, идентифицирующий кэшированное значение
{return} mixed значение, хранящееся в кэше; false, если значение отсутствует в кэше или истек срок его действия.
Исходный код: framework/caching/CCache.php#348 (показать)
public function offsetGet($id)
{
    return 
$this->get($id);
}

Извлекает значение из кэша по заданному ключу. Этот метод требуется интерфейсом ArrayAccess.

offsetSet() метод

public void offsetSet(string $id, mixed $value)
$id string ключ, идентифицирующий значение для кэширования
$value mixed значение для кэширования
Исходный код: framework/caching/CCache.php#361 (показать)
public function offsetSet($id, $value)
{
    
$this->set($id, $value);
}

Хранит значение, идентифицируемое ключом, в кэше. Если кэш уже содержит такой ключ, существующее значение будет заменено новым. Для добавления срока действия и зависимостей используйте метод set(). Этот метод требуется интерфейсом ArrayAccess.

offsetUnset() метод

public boolean offsetUnset(string $id)
$id string ключ удаляемого значения
{return} boolean true, если удаление прошло успешно, иначе false
Исходный код: framework/caching/CCache.php#372 (показать)
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.
Исходный код: framework/caching/CCache.php#173 (показать)
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.
Исходный код: framework/caching/CCache.php#280 (показать)
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API