Packages:
System
System.Caching
System.Collections
System.Data
System.Data.ActiveRecord
System.Data.ActiveRecord.Relations
System.Data.ActiveRecord.Scaffold
System.Data.ActiveReecord.Scaffold.InputBuilder
System.Data.Commom.Sqlite
System.Data.Common
System.Data.Common.Mssql
System.Data.Common.Mysql
System.Data.Common.Oracle
System.Data.Common.Pgsql
System.Data.Common.Sqlite
System.Data.DataGateway
System.Data.SqlMap
System.Data.SqlMap.Configuration
System.Data.SqlMap.Statements
System.Exceptions
System.I18N
System.IO
System.Security
System.Util
System.Web
System.Web.Services
System.Web.UI
System.Web.UI.ActiveControls
System.Web.UI.WebControls
System.Web.UI.WebControls.assets
System.Xml


Classes:
Keyword

Class TDbCache

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

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:

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: (itemkey CHAR(128) PRIMARY KEY, value BLOB, expire INT)

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.)

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.

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,

  1. $cache=new TDbCache; // TDbCache may also be loaded as a Prado application module
  2. $cache->init(null);
  3. $cache->add('object',$object);
  4. $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

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

Since: 3.1.0
Author: Qiang Xue <qiang.xue@gmail.com>

Method Summary
protected  boolean
addValue ( string $key, string $value, integer $expire)
Stores a value identified by a key into cache if the cache does not contain this key.
protected  TDbConnection
createDbConnection ( string 0)
Creates the DB connection.
protected  boolean
deleteValue ( string $key)
Deletes a value with the specified key from cache This is the implementation of the method declared in the parent class.
void
flush ()
Deletes all values from cache.
boolean
string
string
string
TDbConnection
string
string
protected  string
getValue ( string $key)
Retrieves a value from cache with a specified key.
void
init ( TXmlElement $config)
Initializes this module.
void
setAutoCreateCacheTable ( boolean $value)
void
setCacheTableName ( string $value)
Sets the name of the DB table to store cache content.
void
setConnectionID ( string $value)
Sets the ID of a TDataSourceConfig module.
void
setConnectionString ( string $value)
void
setPassword ( string $value)
void
setUsername ( string $value)
protected  boolean
setValue ( string $key, string $value, integer $expire)
Stores a value identified by a key in cache.
Methods Inherited From TCache
TCache::add(), TCache::delete(), TCache::flush(), TCache::generateUniqueKey(), TCache::get(), TCache::getKeyPrefix(), TCache::getPrimaryCache(), TCache::init(), TCache::offsetExists(), TCache::offsetGet(), TCache::offsetSet(), TCache::offsetUnset(), TCache::set(), TCache::setKeyPrefix(), TCache::setPrimaryCache(),
Methods Inherited From TModule
TModule::getID(), TModule::init(), TModule::setID()
Methods Inherited From TApplicationComponent
TApplicationComponent::getApplication(), TApplicationComponent::getRequest(), TApplicationComponent::getResponse(), TApplicationComponent::getService(), TApplicationComponent::getSession(), TApplicationComponent::getUser(), TApplicationComponent::publishAsset(), TApplicationComponent::publishFilePath()
Methods 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()

Method Details

addValue

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

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.

Input
string$keythe key identifying the value to be cached
string$valuethe value to be cached
integer$expirethe number of seconds in which the cached value will expire. 0 means never expire.
Output
boolean true if the value is successfully stored into cache, false otherwise
Exception

createDbConnection

protected TDbConnection createDbConnection (string 0 )

Creates the DB connection.

Input
string0the module ID for TDataSourceConfig
Output
TDbConnection the created DB connection
Exception
throwsTConfigurationException if module ID is invalid or empty

deleteValue

protected boolean deleteValue (string $key )

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

Input
string$keythe key of the value to be deleted
Output
boolean if no error happens during deletion
Exception

flush

public void flush ()

Deletes all values from cache.

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

Output
Exception

getAutoCreateCacheTable

public boolean getAutoCreateCacheTable ()

Output
boolean whether the cache DB table should be automatically created if not exists. Defaults to true.
Exception

getCacheTableName

public string getCacheTableName ()

Output
string the name of the DB table to store cache content. Defaults to 'pradocache'.
Exception

getConnectionID

public string getConnectionID ()

Output
string the ID of a TDataSourceConfig module. Defaults to empty string, meaning not set.
Exception

getConnectionString

public string getConnectionString ()

Output
string The Data Source Name, or DSN, contains the information required to connect to the database.
Exception

getDbConnection

public TDbConnection getDbConnection ()

Output
TDbConnection the DB connection instance
Exception

getPassword

public string getPassword ()

Output
string the password for establishing DB connection. Defaults to empty string.
Exception

getUsername

public string getUsername ()

Output
string the username for establishing DB connection. Defaults to empty string.
Exception

getValue

protected string getValue (string $key )

Retrieves a value from cache with a specified key.

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

Input
string$keya unique key identifying the cached value
Output
string the value stored in cache, false if the value is not in the cache or expired.
Exception

init

public void init (TXmlElement $config )

Initializes this module.

This method is required by the IModule interface. It checks if the DbFile property is set, and creates a SQLiteDatabase instance for it. The database or the cache table does not exist, they will be created. Expired values are also deleted.

Input
TXmlElement$configconfiguration for this module, can be null
Output
Exception
throwsTConfigurationException if sqlite extension is not installed, DbFile is set invalid, or any error happens during creating database or cache table.

setAutoCreateCacheTable

public void setAutoCreateCacheTable (boolean $value )

Input
boolean$valuewhether the cache DB table should be automatically created if not exists.
Output
Exception

setCacheTableName

public void setCacheTableName (string $value )

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: (itemkey CHAR(128) PRIMARY KEY, value BLOB, expire INT) 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.)

Input
string$valuethe name of the DB table to store cache content
Output
Exception

setConnectionID

public void setConnectionID (string $value )

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.

Input
string$valueID of the TDataSourceConfig module
Output
Exception

setConnectionString

public void setConnectionString (string $value )

Input
string$valueThe Data Source Name, or DSN, contains the information required to connect to the database.
Output
Exception

setPassword

public void setPassword (string $value )

Input
string$valuethe password for establishing DB connection
Output
Exception

setUsername

public void setUsername (string $value )

Input
string$valuethe username for establishing DB connection
Output
Exception

setValue

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

Stores a value identified by a key in cache.

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

Input
string$keythe key identifying the value to be cached
string$valuethe value to be cached
integer$expirethe number of seconds in which the cached value will expire. 0 means never expire.
Output
boolean true if the value is successfully stored into cache, false otherwise
Exception