PHP Class Prado\Caching\TDbCache
TDbCache implements a cache application module by storing cached data in a database.
TDbCache relies on {@link http://www.php.net/manual/en/ref.pdo.php 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:
- {@link setConnectionID ConnectionID} or
- {@link setConnectionString ConnectionString}, {@link setUsername Username} and {@link setPassword 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 {@link setCacheTableName CacheTableName} and {@link setAutoCreateCacheTable AutoCreateCacheTableName} properties.
{@link setFlushInterval 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:
- {@link get} : retrieve the value with a key (if any) from cache
- {@link set} : store the value with a key into cache
- {@link add} : store the value only if cache does not have this key
- {@link delete} : delete the value with the specified key from cache
- {@link flush} : delete all values from cache
Each value is associated with an expiration time. The {@link 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 {@link TApplication} as the
cache module. It can be accessed via {@link TApplication::getCache()}.
TDbCache may be configured in application configuration file as follows
显示文件
Open project: pradosoft/prado
Public Methods
Protected Methods
Method |
Description |
|
addValue ( $key, $value, $expire ) : boolean |
Stores a value identified by a key into cache if the cache does not contain this key. |
|
createDbConnection ( ) : TDbConnection |
Creates the DB connection. |
|
deleteValue ( $key ) : boolean |
Deletes a value with the specified key from cache
This is the implementation of the method declared in the parent class. |
|
getValue ( $key ) : string |
Retrieves a value from cache with a specified key. |
|
initializeCache ( $force = false ) : void |
Initialize TDbCache |
|
setValue ( $key, $value, $expire ) : boolean |
Stores a value identified by a key in cache. |
|
Method Details
__destruct()
public method
Disconnect the db connection.
addValue()
protected method
This is the implementation of the method declared in the parent class.
protected addValue ( $key, $value, $expire ) : boolean |
return |
boolean |
true if the value is successfully stored into cache, false otherwise |
createDbConnection()
protected method
Creates the DB connection.
protected createDbConnection ( ) : TDbConnection |
return |
Prado\Data\TDbConnection |
the created DB connection |
deleteValue()
protected method
Deletes a value with the specified key from cache
This is the implementation of the method declared in the parent class.
doFlushCacheExpired()
public method
Event listener for TApplication.OnSaveState
doInitializeCache()
public method
Event listener for TApplication.OnLoadStateComplete
Be careful of performing this operation if the cache is shared by multiple applications.
flushCacheExpired()
public method
Flush expired values from cache depending on {@link setFlushInterval FlushInterval}
getAutoCreateCacheTable()
public method
getCacheTableName()
public method
getConnectionID()
public method
public getConnectionID ( ) : string |
return |
string |
the ID of a {@link TDataSourceConfig} module. Defaults to empty string, meaning not set. |
getConnectionString()
public method
getDbConnection()
public method
public getDbConnection ( ) : TDbConnection |
return |
Prado\Data\TDbConnection |
the DB connection instance |
getFlushInterval()
public method
getPassword()
public method
public getPassword ( ) : string |
return |
string |
the password for establishing DB connection. Defaults to empty string. |
getUsername()
public method
public getUsername ( ) : string |
return |
string |
the username for establishing DB connection. Defaults to empty string. |
getValue()
protected method
This is the implementation of the method declared in the parent class.
protected getValue ( $key ) : string |
return |
string |
the value stored in cache, false if the value is not in the cache or expired. |
This method is required by the IModule interface.
attach {@link doInitializeCache} to TApplication.OnLoadStateComplete event
attach {@link doFlushCacheExpired} to TApplication.OnSaveState event
initializeCache()
protected method
If {@link setAutoCreateCacheTable AutoCreateCacheTableName} is 'true' check existence of cache table
and create table if does not exist.
setAutoCreateCacheTable()
public method
setCacheTableName()
public method
Note, if {@link setAutoCreateCacheTable 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!
setConnectionID()
public method
The datasource module will be used to establish the DB connection for this cache module.
The database connection can also be specified via {@link setConnectionString ConnectionString}.
When both ConnectionID and ConnectionString are specified, the former takes precedence.
setConnectionString()
public method
setFlushInterval()
public method
To disable automatic deletion of expired items,
e.g. for external flushing via cron you can set value to '0'
setPassword()
public method
setUsername()
public method
setValue()
protected method
This is the implementation of the method declared in the parent class.
protected setValue ( $key, $value, $expire ) : boolean |
return |
boolean |
true if the value is successfully stored into cache, false otherwise |