Spec-Zone.ru › Yii 1.1

CDbCache

Пакет system.caching
Наследование класс CDbCache » CCache » CApplicationComponent » CComponent
Реализует ArrayAccess, ICache, IApplicationComponent
С версии 1.0
Исходный код framework/caching/CDbCache.php
CDbCache реализует компонент кэша, хранящий данные в базе данных.

CDbCache хранит данные кэша в таблице базы данных с именем cacheTableName. Если таблица не существует, она будет автоматически создана. Установив autoCreateCacheTable в false, можно также вручную создать таблицу в базе данных.

CDbCache использует PDO для доступа к базе данных. По умолчанию используется база данных SQLite3 в каталоге приложения. Также можно указать connectionID, чтобы использовать компонент доступа к базе данных приложения.

См. руководство по CCache для общих операций с кэшем, поддерживаемых CDbCache.

Общественные свойства

Свойство Тип Описание Определено в
autoCreateCacheTable boolean указывает, должна ли таблица кэша базы данных создаваться автоматически, если она не существует. CDbCache
behaviors array поведения, которые должны быть присоединены к этому компоненту. CApplicationComponent
cacheTableName string имя таблицы базы данных для хранения содержимого кэша. CDbCache
connectionID string идентификатор компонента приложения CDbConnection. CDbCache
dbConnection CDbConnection экземпляр подключения к базе данных CDbCache
gCProbability integer вероятность (миллионных долей) выполнения сбора мусора (GC) при сохранении данных в кэше. CDbCache
hashKey boolean указывает, нужно ли хешировать ключ кэша с помощью md5 для нормализации. CCache
isInitialized boolean Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
keyPrefix string строка, добавляемая в префикс к каждому ключу кэша для уникальности. CCache
serializer array|boolean функции, используемые для сериализации и десериализации данных кэша. CCache
END_OF_DOCUMENT_MARKER

Общедоступные методы

Метод Описание Определено в
__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
getDbConnection() Возвращает экземпляр подключения к БД. CDbCache
getEventHandlers() Возвращает список присоединенных обработчиков событий для события. CComponent
getGCProbability() Возвращает вероятность (частей на миллион), что будет выполнена очистка мусора (GC), при хранении данных в кэше. По умолчанию равно 100, что соответствует 0,01% шансу. CDbCache
getIsInitialized() Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли присоединенные обработчики для события с заданным именем. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует этот компонент приложения. CDbCache
mget() Извлекает несколько значений из кэша по заданным ключам. CCache
offsetExists() Возвращает, есть ли запись в кэше с указанным ключом. CCache
offsetGet() Извлекает значение из кэша по заданному ключу. CCache
offsetSet() Сохраняет значение, идентифицированное ключом, в кэше. CCache
offsetUnset() Удаляет значение с указанным ключом из кэша. CCache
raiseEvent() Вызывает событие. CComponent
set() Сохраняет значение, идентифицированное ключом, в кэше. CCache
setDbConnection() Устанавливает подключение к БД, используемое компонентом кэша. CDbCache
setGCProbability() Устанавливает вероятность (частей на миллион) выполнения очистки мусора (GC) при хранении данных в кэше. По умолчанию равно 100, что соответствует 0,01% шансу. Это число должно быть между 0 и 1000000. Значение 0 означает, что GC вообще не будет выполняться. CDbCache

Защищенные методы

Метод Описание Определено в
addValue() Сохраняет значение, идентифицированное ключом, в кэше, если в кэше нет такого ключа. CDbCache
createCacheTable() Создает таблицу кэша в БД. CDbCache
deleteValue() Удаляет значение с указанным ключом из кэша. CDbCache
flushValues() Удаляет все значения из кэша. CDbCache
gc() Удаляет истекшие данные. CDbCache
generateUniqueKey() CCache
getValue() Извлекает значение из кэша по заданному ключу. CDbCache
getValues() Извлекает несколько значений из кэша по заданным ключам. CDbCache
setValue() Сохраняет значение, идентифицированное ключом, в кэше. CDbCache

Подробное описание свойств

autoCreateCacheTable свойство

public boolean $autoCreateCacheTable;

Указывает, должна ли таблица кэша в БД создаваться автоматически, если она не существует. По умолчанию значение true. Если таблица уже создана, рекомендуется установить это свойство в false для повышения производительности.

См. также

  • cacheTableName

cacheTableName свойство

public string $cacheTableName;

Имя таблицы БД для хранения содержимого кэша. По умолчанию 'YiiCache'. Обратите внимание, если autoCreateCacheTable имеет значение false, и вы хотите создать таблицу БД вручную, вам необходимо убедиться, что таблица БД имеет следующую структуру:

(id CHAR(128) PRIMARY KEY, expire INTEGER, value BLOB)
Обратите внимание, что некоторые СУБД могут не поддерживать тип BLOB. В этом случае замените 'BLOB' подходящим типом бинарных данных (например, LONGBLOB в MySQL, BYTEA в PostgreSQL.)

См. также

  • autoCreateCacheTable

connectionID свойство

public string $connectionID;

Идентификатор компонента приложения CDbConnection. Если не задан, база данных SQLite3 будет автоматически создана и использована. Файл базы данных SQLite находится protected/runtime/cache-YiiVersion.db.

dbConnection свойство

public CDbConnection getDbConnection()
public void setDbConnection(CDbConnection $value)

экземпляр подключения к базе данных

gCProbability свойство

public integer getGCProbability()
public void setGCProbability(integer $value)

вероятность (части на миллион), что сборка мусора (GC) должна быть выполнена при сохранении фрагмента данных в кэше. По умолчанию 100, что означает 0,01% вероятность.

Подробное описание методов

addValue() метод

protected boolean addValue(string $key, string $value, integer $expire)
$key строка ключ, идентифицирующий значение для кэширования
$value строка значение для кэширования
$expire целое число количество секунд, в течение которых кэшированное значение будет действовать. 0 означает, что срок действия не ограничен.
{return} логическое значение true, если значение успешно сохранено в кэше, иначе false
Исходный код: framework/caching/CDbCache.php#255 (показать)
protected function addValue($key,$value,$expire)
{
    if(!
$this->_gced && mt_rand(0,1000000)<$this->_gcProbability)
    {
        
$this->gc();
        
$this->_gced=true;
    }

    if(
$expire>0)
        
$expire+=time();
    else
        
$expire=0;
    
$sql="INSERT INTO {$this->cacheTableName} (id,expire,value) VALUES ('$key',$expire,:value)";
    try
    {
        
$command=$this->getDbConnection()->createCommand($sql);
        
$command->bindValue(':value',$value,PDO::PARAM_LOB);
        
$command->execute();
        return 
true;
    }
    catch(
Exception $e)
    {
        return 
false;
    }
}

Сохраняет значение, идентифицируемое ключом, в кэше, если этот ключ в кэше отсутствует. Это реализация метода, объявленного в родительском классе.

createCacheTable() метод

protected void createCacheTable(CDbConnection $db, string $tableName)
$db CDbConnection подключение к базе данных
$tableName строка имя таблицы, которая должна быть создана
Исходный код: framework/caching/CDbCache.php#122 (показать)
protected function createCacheTable($db,$tableName)
{
    
$driver=$db->getDriverName();
    if(
$driver==='mysql')
        
$blob='LONGBLOB';
    elseif(
$driver==='pgsql')
        
$blob='BYTEA';
    else
        
$blob='BLOB';
    
$sql=<<<EOD
CREATE TABLE $tableName
(
id CHAR(128) PRIMARY KEY,
expire INTEGER,
value 
$blob
)
EOD;
    
$db->createCommand($sql)->execute();
}

Создаёт таблицу кэша в базе данных.

deleteValue() метод

protected boolean deleteValue(string $key)
$key строка ключ значения, которое необходимо удалить
{return} логическое значение true, если удаление прошло без ошибок
Исходный код: framework/caching/CDbCache.php#287 (показать)
protected function deleteValue($key)
{
    
$sql="DELETE FROM {$this->cacheTableName} WHERE id='$key'";
    
$this->getDbConnection()->createCommand($sql)->execute();
    return 
true;
}

Удаляет значение с указанным ключом из кэша. Это реализация метода, объявленного в родительском классе.

flushValues() метод (доступен начиная с v1.1.5)

protected boolean flushValues()
{return} логическое значение успешно ли выполнена операция очистки.
Исходный код: framework/caching/CDbCache.php#308 (показать)
protected function flushValues()
{
    
$this->getDbConnection()->createCommand("DELETE FROM {$this->cacheTableName}")->execute();
    return 
true;
}

Удаляет все значения из кэша. Это реализация метода, объявленного в родительском классе.

gc() метод

protected void gc()
Исходный код: framework/caching/CDbCache.php#297 (показать)
protected function gc()
{
    
$this->getDbConnection()->createCommand("DELETE FROM {$this->cacheTableName} WHERE expire>0 AND expire<".time())->execute();
}

Удаляет устаревшие значения данных.

getDbConnection() метод

public CDbConnection getDbConnection()
{return} CDbConnection экземпляр подключения к базе данных
Исходный код: framework/caching/CDbCache.php#146 (показать)
public function getDbConnection()
{
    if(
$this->_db!==null)
        return 
$this->_db;
    elseif((
$id=$this->connectionID)!==null)
    {
        if((
$this->_db=Yii::app()->getComponent($id)) instanceof CDbConnection)
            return 
$this->_db;
        else
            throw new 
CException(Yii::t('yii','CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.',
                array(
'{id}'=>$id)));
    }
    else
    {
        
$dbFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'cache-'.Yii::getVersion().'.db';
        return 
$this->_db=new CDbConnection('sqlite:'.$dbFile);
    }
}

getGCProbability() метод

public integer getGCProbability()
{return} целое число вероятность (части на миллион), что сборка мусора (GC) должна быть выполнена при сохранении фрагмента данных в кэше. По умолчанию 100, что означает 0,01% вероятность.
Исходный код: framework/caching/CDbCache.php#97 (показать)
public function getGCProbability()
{
    return 
$this->_gcProbability;
}

getValue() метод

protected string|boolean getValue(string $key)
$key строка уникальный ключ, идентифицирующий кэшированное значение
{return} строка|логическое значение значение, хранящееся в кэше; false, если значение не найдено в кэше или истекло.
Исходный код: framework/caching/CDbCache.php#181 (показать)
protected function getValue($key)
{
    
$time=time();
    
$sql="SELECT value FROM {$this->cacheTableName} WHERE id='$key' AND (expire=0 OR expire>$time)";
    
$db=$this->getDbConnection();
    if(
$db->queryCachingDuration>0)
    {
        
$duration=$db->queryCachingDuration;
        
$db->queryCachingDuration=0;
        
$result=$db->createCommand($sql)->queryScalar();
        
$db->queryCachingDuration=$duration;
        return 
$result;
    }
    else
        return 
$db->createCommand($sql)->queryScalar();
}

Извлекает значение из кэша по указанному ключу. Это реализация метода, объявленного в родительском классе.

getValues() метод

protected array getValues(array $keys)
$keys массив список ключей, идентифицирующих кэшированные значения
{return} массив список кэшированных значений, индексированных по ключам
Исходный код: framework/caching/CDbCache.php#203 (показать)
protected function getValues($keys)
{
    if(empty(
$keys))
        return array();

    
$ids=implode("','",$keys);
    
$time=time();
    
$sql="SELECT id, value FROM {$this->cacheTableName} WHERE id IN ('$ids') AND (expire=0 OR expire>$time)";

    
$db=$this->getDbConnection();
    if(
$db->queryCachingDuration>0)
    {
        
$duration=$db->queryCachingDuration;
        
$db->queryCachingDuration=0;
        
$rows=$db->createCommand($sql)->queryAll();
        
$db->queryCachingDuration=$duration;
    }
    else
        
$rows=$db->createCommand($sql)->queryAll();

    
$results=array();
    foreach(
$keys as $key)
        
$results[$key]=false;
    foreach(
$rows as $row)
        
$results[$row['id']]=$row['value'];
    return 
$results;
}

Извлекает несколько значений из кэша по указанным ключам.

init() метод

public void init()
Исходный код: framework/caching/CDbCache.php#73 (показать)
public function init()
{
    
parent::init();

    
$db=$this->getDbConnection();
    
$db->setActive(true);
    if(
$this->autoCreateCacheTable)
    {
        
$sql="DELETE FROM {$this->cacheTableName} WHERE expire>0 AND expire<".time();
        try
        {
            
$db->createCommand($sql)->execute();
        }
        catch(
Exception $e)
        {
            
$this->createCacheTable($db,$this->cacheTableName);
        }
    }
}

Инициализирует компонент приложения.

Этот метод необходим для интерфейса IApplicationComponent. Он гарантирует существование таблицы кэша в базе данных. Также удаляет устаревшие элементы данных из кэша.

setDbConnection() метод (доступен начиная с v1.1.5)

public void setDbConnection(CDbConnection $value)
$value CDbConnection экземпляр подключения к базе данных
Исходный код: framework/caching/CDbCache.php#170 (показать)
public function setDbConnection($value)
{
    
$this->_db=$value;
}

Устанавливает подключение к базе данных, используемое компонентом кэша.

setGCProbability() метод

public void setGCProbability(integer $value)
$value целое число вероятность (части на миллион), что сборка мусора (GC) должна быть выполнена при сохранении фрагмента данных в кэше. По умолчанию 100, что означает 0,01% вероятность. Это число должно быть от 0 до 1000000. Значение 0 означает, что сборка мусора не будет выполняться вообще.
Исходный код: framework/caching/CDbCache.php#107 (показать)
public function setGCProbability($value)
{
    
$value=(int)$value;
    if(
$value<0)
        
$value=0;
    if(
$value>1000000)
        
$value=1000000;
    
$this->_gcProbability=$value;
}

setValue() метод

protected boolean setValue(string $key, string $value, integer $expire)
$key строка ключ, идентифицирующий значение для кэширования
$value строка значение для кэширования
$expire целое число количество секунд, в течение которых кэшированное значение будет действовать. 0 означает, что срок действия не ограничен.
{return} логическое значение true, если значение успешно сохранено в кэше, иначе false
Исходный код: framework/caching/CDbCache.php#240 (показать)
protected function setValue($key,$value,$expire)
{
    
$this->deleteValue($key);
    return 
$this->addValue($key,$value,$expire);
}

Сохраняет значение, идентифицируемое ключом, в кэше. Это реализация метода, объявленного в родительском классе.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbCache

Spec-Zone.ru

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