CDbCache
| Пакет | system.caching |
|---|---|
| Наследование | класс CDbCache » CCache » CApplicationComponent » CComponent |
| Реализует | ArrayAccess, ICache, IApplicationComponent |
| С версии | 1.0 |
| Исходный код | framework/caching/CDbCache.php |
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 |
Общедоступные методы
| Метод | Описание | Определено в |
|---|---|---|
| __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 свойство
public string $cacheTableName;
Имя таблицы БД для хранения содержимого кэша. По умолчанию 'YiiCache'. Обратите внимание, если autoCreateCacheTable имеет значение false, и вы хотите создать таблицу БД вручную, вам необходимо убедиться, что таблица БД имеет следующую структуру:
(id CHAR(128) PRIMARY KEY, expire INTEGER, value BLOB)Обратите внимание, что некоторые СУБД могут не поддерживать тип BLOB. В этом случае замените 'BLOB' подходящим типом бинарных данных (например, LONGBLOB в MySQL, BYTEA в PostgreSQL.)
См. также
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 |
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 | строка | имя таблицы, которая должна быть создана |
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, если удаление прошло без ошибок |
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} | логическое значение | успешно ли выполнена операция очистки. |
protected function flushValues()
{
$this->getDbConnection()->createCommand("DELETE FROM {$this->cacheTableName}")->execute();
return true;
}
Удаляет все значения из кэша. Это реализация метода, объявленного в родительском классе.
gc() метод
protected void gc() |
protected function gc()
{
$this->getDbConnection()->createCommand("DELETE FROM {$this->cacheTableName} WHERE expire>0 AND expire<".time())->execute();
}
Удаляет устаревшие значения данных.
getDbConnection() метод
public CDbConnection getDbConnection() | ||
| {return} | CDbConnection | экземпляр подключения к базе данных |
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% вероятность. |
public function getGCProbability()
{
return $this->_gcProbability;
}
getValue() метод
protected string|boolean getValue(string $key) | ||
| $key | строка | уникальный ключ, идентифицирующий кэшированное значение |
| {return} | строка|логическое значение | значение, хранящееся в кэше; false, если значение не найдено в кэше или истекло. |
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} | массив | список кэшированных значений, индексированных по ключам |
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() |
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 | экземпляр подключения к базе данных |
public function setDbConnection($value)
{
$this->_db=$value;
}
Устанавливает подключение к базе данных, используемое компонентом кэша.
setGCProbability() метод
public void setGCProbability(integer $value) | ||
| $value | целое число | вероятность (части на миллион), что сборка мусора (GC) должна быть выполнена при сохранении фрагмента данных в кэше. По умолчанию 100, что означает 0,01% вероятность. Это число должно быть от 0 до 1000000. Значение 0 означает, что сборка мусора не будет выполняться вообще. |
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 |
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