## Class TDbCache

Description

TDbCache class

TDbCache implements a cache application module by storing cached data in a database.

TDbCache relies on PDO to retrieve data from databases. In order to use TDbCache, you need to enable the PDO extension as well as the corresponding PDO DB driver. For example, to use SQLite database to store cached data, you need both php_pdo and php_pdo_sqlite extensions.

By default, TDbCache creates and uses an SQLite database under the application runtime directory. You may change this default setting by specifying the following properties:

- ConnectionID or
- ConnectionString, Username and Pasword.

The cached data is stored in a table in the specified database. By default, the name of the table is called 'pradocache'. If the table does not exist in the database, it will be automatically created with the following structure:

     CREATE TABLE pradocache (itemkey CHAR(128), value BLOB, expire INT)
     CREATE INDEX IX_itemkey ON pradocache (itemkey)
     CREATE INDEX IX_expire ON pradocache (expire)

Note, some DBMS might not support BLOB type. In this case, replace 'BLOB' with a suitable binary data type (e.g. LONGBLOB in MySQL, BYTEA in PostgreSQL.)

Important: Make sure that the indices are non-unique!

If you want to change the cache table name, or if you want to create the table by yourself, you may set CacheTableName and AutoCreateCacheTableName properties.

FlushInterval control how often expired items will be removed from cache. If you prefer to remove expired items manualy e.g. via cronjob you can disable automatic deletion by setting FlushInterval to '0'.

The following basic cache operations are implemented:

- get : retrieve the value with a key (if any) from cache
- set : store the value with a key into cache
- add : store the value only if cache does not have this key
- delete : delete the value with the specified key from cache
- flush : delete all values from cache

Each value is associated with an expiration time. The get operation ensures that any expired value will not be returned. The expiration time by the number of seconds. A expiration time 0 represents never expire.

By definition, cache does not ensure the existence of a value even if it never expires. Cache is not meant to be an persistent storage.

Do not use the same database file for multiple applications using TDbCache. Also note, cache is shared by all user sessions of an application.

Some usage examples of TDbCache are as follows,

     $cache=new TDbCache;  // TDbCache may also be loaded as a Prado application module
      $cache->init(null);
     $cache->add('object',$object);
     $object2=$cache->get('object');

If loaded, TDbCache will register itself with TApplication as the cache module. It can be accessed via TApplication::getCache().

TDbCache may be configured in application configuration file as follows

     <module id="cache" class="System.Caching.TDbCache" />

- since: 3.1.0
- version: $Id: TDbCache.php 2741 2009-11-08 09:59:34Z godzilla80@gmx.net $
- author: Qiang Xue <qiang.xue@gmail.com>

Located in /Caching/TDbCache.php (line 89)

    TComponent
       |
       --TApplicationComponent
          |
          --TModule
             |
             --TCache
                |
                --TDbCache

Method Summary
void __destruct ()
boolean addValue (string $key, string $value, integer $expire)
TDbConnection createDbConnection (string 0)
boolean deleteValue (string $key)
void doFlushCacheExpired ()
void doInitializeCache ()
void flush ()
void flushCacheExpired ([boolean $force = false])
boolean getAutoCreateCacheTable ()
string getCacheTableName ()
string getConnectionID ()
string getConnectionString ()
TDbConnection getDbConnection ()
integer getFlushInterval ()
string getPassword ()
string getUsername ()
string getValue (string $key)
void init (TXmlElement $config)
void initializeCache ([boolean $force = false])
void setAutoCreateCacheTable (boolean $value)
void setCacheTableName (string $value)
void setConnectionID (string $value)
void setConnectionString (string $value)
void setFlushInterval (integer $value)
void setPassword (string $value)
void setUsername (string $value)
boolean setValue (string $key, string $value, integer $expire)
Methods
Destructor __destruct (line 127)

Destructor.

Disconnect the db connection.

- access: public

void __destruct ()
addValue (line 502)

Stores a value identified by a key into cache if the cache does not contain this key.

This is the implementation of the method declared in the parent class.

- return: true if the value is successfully stored into cache, false otherwise
- access: protected

boolean addValue (string $key, string $value, integer $expire)

- string $key: the key identifying the value to be cached
- string $value: the value to be cached
- integer $expire: the number of seconds in which the cached value will expire. 0 means never expire.

Redefinition of:

TCache::addValue()
  Stores a value identified by a key into cache if the cache does not contain this key.

createDbConnection (line 292)

Creates the DB connection.

- return: the created DB connection
- access: protected
- throws: TConfigurationException if module ID is invalid or empty

TDbConnection createDbConnection (string 0)

- string 0: the module ID for TDataSourceConfig

deleteValue (line 536)

Deletes a value with the specified key from cache This is the implementation of the method declared in the parent class.

- return: if no error happens during deletion
- access: protected

boolean deleteValue (string $key)

- string $key: the key of the value to be deleted

Redefinition of:

TCache::deleteValue()
  Deletes a value with the specified key from cache This method should be implemented by child classes to delete the data from actual cache storage.

doFlushCacheExpired (line 154)

Event listener for TApplication.OnSaveState

- access: public
- see: TDbCache::flushCacheExpired()
- since: 3.1.5

void doFlushCacheExpired ()
doInitializeCache (line 166)

Event listener for TApplication.OnLoadStateComplete

- access: public
- see: TDbCache::initializeCache()
- since: 3.1.5

void doInitializeCache ()
flush (line 558)

Deletes all values from cache.

Be careful of performing this operation if the cache is shared by multiple applications.

- access: public

void flush ()

Redefinition of:

TCache::flush()
  Deletes all values from cache.

flushCacheExpired (line 244)

Flush expired values from cache depending on setFlushInterval

- access: public
- since: 3.1.5

void flushCacheExpired ([boolean $force = false])

- boolean $force: override FlushInterval and force deletion of expired items

getAutoCreateCacheTable (line 443)

- return: whether the cache DB table should be automatically created if not exists. Defaults to true.
- access: public
- see: TDbCache::setAutoCreateCacheTable()

boolean getAutoCreateCacheTable ()
getCacheTableName (line 410)

- return: the name of the DB table to store cache content. Defaults to 'pradocache'.
- access: public
- see: TDbCache::setAutoCreateCacheTable()

string getCacheTableName ()
getConnectionID (line 339)

- return: the ID of a TDataSourceConfig module. Defaults to empty string, meaning not set.
- access: public
- since: 3.1.1

string getConnectionID ()
getConnectionString (line 360)

- return: The Data Source Name, or DSN, contains the information required to connect to the database.
- access: public

string getConnectionString ()
getDbConnection (line 326)

- return: the DB connection instance
- access: public

TDbConnection getDbConnection ()
getFlushInterval (line 267)

- return: Interval in sec expired items will be removed from cache. Default to 60
- access: public
- since: 3.1.5

integer getFlushInterval ()
getPassword (line 393)

- return: the password for establishing DB connection. Defaults to empty string.
- access: public

string getPassword ()
getUsername (line 377)

- return: the username for establishing DB connection. Defaults to empty string.
- access: public

string getUsername ()
getValue (line 463)

Retrieves a value from cache with a specified key.

This is the implementation of the method declared in the parent class.

- return: the value stored in cache, false if the value is not in the cache or expired.
- access: protected

string getValue (string $key)

- string $key: a unique key identifying the cached value

Redefinition of:

TCache::getValue()
  Retrieves a value from cache with a specified key.

init (line 141)

Initializes this module.

This method is required by the IModule interface. attach doInitializeCache to TApplication.OnLoadStateComplete event attach doFlushCacheExpired to TApplication.OnSaveState event

- access: public

void init (TXmlElement $config)

- TXmlElement $config: configuration for this module, can be null

Redefinition of:

TCache::init()
  Initializes the cache module.

initializeCache (line 182)

Initialize TDbCache

If AutoCreateCacheTableName is 'true' check existence of cache table and create table if does not exist.

- access: protected
- since: 3.1.5
- throws: TConfigurationException if any error happens during creating database or cache table.

void initializeCache ([boolean $force = false])

- boolean $force: Force override global state check

setAutoCreateCacheTable (line 452)

- access: public
- see: TDbCache::setCacheTableName()

void setAutoCreateCacheTable (boolean $value)

- boolean $value: whether the cache DB table should be automatically created if not exists.

setCacheTableName (line 434)

Sets the name of the DB table to store cache content.

Note, if AutoCreateCacheTable is false and you want to create the DB table manually by yourself, you need to make sure the DB table is of the following structure:

     CREATE TABLE pradocache (itemkey CHAR(128), value BLOB, expire INT)
     CREATE INDEX IX_itemkey ON pradocache (itemkey)
     CREATE INDEX IX_expire ON pradocache (expire)

Note, some DBMS might not support BLOB type. In this case, replace 'BLOB' with a suitable binary data type (e.g. LONGBLOB in MySQL, BYTEA in PostgreSQL.)

Important: Make sure that the indices are non-unique!

- access: public
- see: TDbCache::setAutoCreateCacheTable()

void setCacheTableName (string $value)

- string $value: the name of the DB table to store cache content

setConnectionID (line 352)

Sets the ID of a TDataSourceConfig module.

The datasource module will be used to establish the DB connection for this cache module. The database connection can also be specified via ConnectionString. When both ConnectionID and ConnectionString are specified, the former takes precedence.

- access: public
- since: 3.1.1

void setConnectionID (string $value)

- string $value: ID of the TDataSourceConfig module

setConnectionString (line 369)

- access: public
- see: http://www.php.net/manual/en/function.pdo-construct.php

void setConnectionString (string $value)

- string $value: The Data Source Name, or DSN, contains the information required to connect to the database.

setFlushInterval (line 281)

Sets interval expired items will be removed from cache

To disable automatic deletion of expired items, e.g. for external flushing via cron you can set value to '0'

- access: public
- since: 3.1.5

void setFlushInterval (integer $value)

- integer $value: Interval in sec

setPassword (line 401)

- access: public

void setPassword (string $value)

- string $value: the password for establishing DB connection

setUsername (line 385)

- access: public

void setUsername (string $value)

- string $value: the username for establishing DB connection

setValue (line 487)

Stores a value identified by a key in cache.

This is the implementation of the method declared in the parent class.

- return: true if the value is successfully stored into cache, false otherwise
- access: protected

boolean setValue (string $key, string $value, integer $expire)

- string $key: the key identifying the value to be cached
- string $value: the value to be cached
- integer $expire: the number of seconds in which the cached value will expire. 0 means never expire.

Redefinition of:

TCache::setValue()
  Stores a value identified by a key in cache.

#### Inherited Methods

Inherited From TCache

> TCache::add()
> TCache::addValue()
> TCache::delete()
> TCache::deleteValue()
> TCache::flush()
> TCache::generateUniqueKey()
> TCache::get()
> TCache::getKeyPrefix()
> TCache::getPrimaryCache()
> TCache::getValue()
> TCache::init()
> TCache::offsetExists()
> TCache::offsetGet()
> TCache::offsetSet()
> TCache::offsetUnset()
> TCache::set()
> TCache::setKeyPrefix()
> TCache::setPrimaryCache()
> TCache::setValue()

Inherited From TModule

> TModule::getID()
> TModule::init()
> TModule::setID()

Inherited From TApplicationComponent

> TApplicationComponent::getApplication()
> TApplicationComponent::getRequest()
> TApplicationComponent::getResponse()
> TApplicationComponent::getService()
> TApplicationComponent::getSession()
> TApplicationComponent::getUser()
> TApplicationComponent::publishAsset()
> TApplicationComponent::publishFilePath()

Inherited From TComponent

> TComponent::addParsedObject()
> TComponent::attachEventHandler()
> TComponent::canGetProperty()
> TComponent::canSetProperty()
> TComponent::createdOnTemplate()
> TComponent::detachEventHandler()
> TComponent::evaluateExpression()
> TComponent::evaluateStatements()
> TComponent::getEventHandlers()
> TComponent::getSubProperty()
> TComponent::hasEvent()
> TComponent::hasEventHandler()
> TComponent::hasProperty()
> TComponent::raiseEvent()
> TComponent::setSubProperty()
> TComponent::__get()
> TComponent::__set()

Documentation generated on Mon, 22 Feb 2010 12:17:33 +0000 by phpDocumentor 1.3.0RC4