CCache is the base class for cache classes with different cache storage
implementation.
A data item can be stored in cache by calling CCache::set()
and be retrieved
back later by CCache::get()
. In both operations, a key identifying the data item
is required. An expiration time and/or a dependency can also be specified when
calling CCache::set()
. If the data item expires or the dependency changes, calling
CCache::get()
will not return back the data item.
Note, by definition, cache does not ensure the existence of a value even if
it does not expire. Cache is not meant to be a persistent storage.
CCache implements the interface
ICache
with the following methods:
Child classes must implement the following methods:
CCache also implements ArrayAccess so that it can be used like an array.
Methods summary
public
|
#
init( )
Initializes the application component. This method overrides the parent
implementation by setting default cache key prefix.
Initializes the application component. This method overrides the parent
implementation by setting default cache key prefix.
Overrides
|
protected
string
|
#
generateUniqueKey( string $key )
Parameters
- $key
string $key a key identifying a value to be cached
Returns
string a key generated from the provided key which ensures the uniqueness across
applications
|
public
mixed
|
#
get( string $id )
Retrieves a value from cache with a specified key.
Retrieves a value from cache with a specified key.
Parameters
- $id
string $id a key identifying the cached value
Returns
mixed the value stored in cache, false if the value is not in the cache, expired or
the dependency has changed.
Implementation of
|
public
array
|
#
mget( array $ids )
Retrieves multiple values from cache with the specified keys. Some caches
(such as memcache, apc) allow retrieving multiple cached values at one time,
which may improve the performance since it reduces the communication cost. In
case a cache does not support this feature natively, it will be simulated by
this method.
Retrieves multiple values from cache with the specified keys. Some caches
(such as memcache, apc) allow retrieving multiple cached values at one time,
which may improve the performance since it reduces the communication cost. In
case a cache does not support this feature natively, it will be simulated by
this method.
Parameters
- $ids
array $ids list of keys identifying the cached values
Returns
array list of cached values corresponding to the specified keys. The array is returned
in terms of (key,value) pairs. If a value is not cached or expired, the
corresponding array value will be false.
Implementation of
|
public
boolean
|
#
set( string $id, mixed $value, integer $expire = 0, ICacheDependency $dependency = null )
Stores a value identified by a key into cache. If the cache already contains
such a key, the existing value and expiration time will be replaced with the new
ones.
Stores a value identified by a key into cache. If the cache already contains
such a key, the existing value and expiration time will be replaced with the new
ones.
Parameters
- $id
string $id the key identifying the value to be cached
- $value
mixed $value the value to be cached
- $expire
integer $expire the number of seconds in which the cached value will expire. 0 means
never expire.
- $dependency
ICacheDependency
$dependency dependency of the cached item. If the dependency changes, the item
is labeled invalid.
Returns
boolean true if the value is successfully stored into cache, false otherwise
Implementation of
|
public
boolean
|
#
add( string $id, mixed $value, integer $expire = 0, ICacheDependency $dependency = null )
Stores a value identified by a key into cache if the cache does not contain
this key. Nothing will be done if the cache already contains the key.
Stores a value identified by a key into cache if the cache does not contain
this key. Nothing will be done if the cache already contains the key.
Parameters
- $id
string $id the key identifying the value to be cached
- $value
mixed $value the value to be cached
- $expire
integer $expire the number of seconds in which the cached value will expire. 0 means
never expire.
- $dependency
ICacheDependency
$dependency dependency of the cached item. If the dependency changes, the item
is labeled invalid.
Returns
boolean true if the value is successfully stored into cache, false otherwise
Implementation of
|
public
boolean
|
#
delete( string $id )
Deletes a value with the specified key from cache
Deletes a value with the specified key from cache
Parameters
- $id
string $id the key of the value to be deleted
Returns
boolean if no error happens during deletion
Implementation of
|
public
boolean
|
#
flush( )
Deletes all values from cache. Be careful of performing this operation if the
cache is shared by multiple applications.
Deletes all values from cache. Be careful of performing this operation if the
cache is shared by multiple applications.
Returns
boolean whether the flush operation was successful.
Implementation of
|
protected
string|boolean
|
#
getValue( string $key )
Retrieves a value from cache with a specified key. This method should be
implemented by child classes to retrieve the data from specific cache storage.
The uniqueness and dependency are handled in CCache::get() already. So only the
implementation of data retrieval is needed.
Retrieves a value from cache with a specified key. This method should be
implemented by child classes to retrieve the data from specific cache storage.
The uniqueness and dependency are handled in CCache::get() already. So only the
implementation of data retrieval is needed.
Parameters
- $key
string $key a unique key identifying the cached value
Returns
string|boolean the value stored in cache, false if the value is not in the cache or expired.
Throws
CException
if this method is not overridden by child classes
|
protected
array
|
#
getValues( array $keys )
Retrieves multiple values from cache with the specified keys. The default
implementation simply calls CCache::getValue() multiple times to retrieve the
cached values one by one. If the underlying cache storage supports multiget,
this method should be overridden to exploit that feature.
Retrieves multiple values from cache with the specified keys. The default
implementation simply calls CCache::getValue() multiple times to retrieve the
cached values one by one. If the underlying cache storage supports multiget,
this method should be overridden to exploit that feature.
Parameters
- $keys
array $keys a list of keys identifying the cached values
Returns
array a list of cached values indexed by the keys
|
protected
boolean
|
#
setValue( string $key, string $value, integer $expire )
Stores a value identified by a key in cache. This method should be
implemented by child classes to store the data in specific cache storage. The
uniqueness and dependency are handled in CCache::set() already. So only the
implementation of data storage is needed.
Stores a value identified by a key in cache. This method should be
implemented by child classes to store the data in specific cache storage. The
uniqueness and dependency are handled in CCache::set() already. So only the
implementation of data storage is needed.
Parameters
- $key
string $key the key identifying the value to be cached
- $value
string $value the value to be cached
- $expire
integer $expire the number of seconds in which the cached value will expire. 0 means
never expire.
Returns
boolean true if the value is successfully stored into cache, false otherwise
Throws
CException
if this method is not overridden by child classes
|
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 method should be implemented by child classes to store the data
in specific cache storage. The uniqueness and dependency are handled in CCache::add() already. So only the implementation of data storage is needed.
Stores a value identified by a key into cache if the cache does not contain
this key. This method should be implemented by child classes to store the data
in specific cache storage. The uniqueness and dependency are handled in CCache::add() already. So only the implementation of data storage is needed.
Parameters
- $key
string $key the key identifying the value to be cached
- $value
string $value the value to be cached
- $expire
integer $expire the number of seconds in which the cached value will expire. 0 means
never expire.
Returns
boolean true if the value is successfully stored into cache, false otherwise
Throws
CException
if this method is not overridden by child classes
|
protected
boolean
|
#
deleteValue( string $key )
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.
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.
Parameters
- $key
string $key the key of the value to be deleted
Returns
boolean if no error happens during deletion
Throws
CException
if this method is not overridden by child classes
|
protected
boolean
|
#
flushValues( )
Deletes all values from cache. Child classes may implement this method to
realize the flush operation.
Deletes all values from cache. Child classes may implement this method to
realize the flush operation.
Returns
boolean whether the flush operation was successful.
Throws
CException
if this method is not overridden by child classes
Since
1.1.5
|
public
boolean
|
#
offsetExists( string $id )
Returns whether there is a cache entry with a specified key. This method is
required by the interface ArrayAccess.
Returns whether there is a cache entry with a specified key. This method is
required by the interface ArrayAccess.
Parameters
- $id
string $id a key identifying the cached value
Returns
boolean
Implementation of
|
public
mixed
|
#
offsetGet( string $id )
Retrieves the value from cache with a specified key. This method is required
by the interface ArrayAccess.
Retrieves the value from cache with a specified key. This method is required
by the interface ArrayAccess.
Parameters
- $id
string $id a key identifying the cached value
Returns
mixed the value stored in cache, false if the value is not in the cache or expired.
Implementation of
|
public
|
#
offsetSet( string $id, mixed $value )
Stores the value identified by a key into cache. If the cache already
contains such a key, the existing value will be replaced with the new ones. To
add expiration and dependencies, use the set() method. This method is required
by the interface ArrayAccess.
Stores the value identified by a key into cache. If the cache already
contains such a key, the existing value will be replaced with the new ones. To
add expiration and dependencies, use the set() method. This method is required
by the interface ArrayAccess.
Parameters
- $id
string $id the key identifying the value to be cached
- $value
mixed $value the value to be cached
Implementation of
|
public
boolean
|
#
offsetUnset( string $id )
Deletes the value with the specified key from cache This method is required
by the interface ArrayAccess.
Deletes the value with the specified key from cache This method is required
by the interface ArrayAccess.
Parameters
- $id
string $id the key of the value to be deleted
Returns
boolean if no error happens during deletion
Implementation of
|
Properties summary
public
string
|
$keyPrefix
|
|
#
a string prefixed to every cache key so that it is unique. Defaults to null
which means to use the CApplication::getId() application ID. If
different applications need to access the same pool of cached data, the same
prefix should be set for each of the applications explicitly.
a string prefixed to every cache key so that it is unique. Defaults to null
which means to use the CApplication::getId() application ID. If
different applications need to access the same pool of cached data, the same
prefix should be set for each of the applications explicitly.
|
public
boolean
|
$hashKey
|
true |
#
whether to md5-hash the cache key for normalization purposes. Defaults to
true. Setting this property to false makes sure the cache key will not be
tampered when calling the relevant methods CCache::get() , CCache::set() , CCache::add() and CCache::delete() . This is useful if a Yii application as well as an
external application need to access the same cache pool (also see description of
CCache::$keyPrefix regarding this use case). However, without normalization you
should make sure the affected cache backend does support the structure (charset,
length, etc.) of all the provided cache keys, otherwise there might be
unexpected behavior.
whether to md5-hash the cache key for normalization purposes. Defaults to
true. Setting this property to false makes sure the cache key will not be
tampered when calling the relevant methods CCache::get() , CCache::set() , CCache::add() and CCache::delete() . This is useful if a Yii application as well as an
external application need to access the same cache pool (also see description of
CCache::$keyPrefix regarding this use case). However, without normalization you
should make sure the affected cache backend does support the structure (charset,
length, etc.) of all the provided cache keys, otherwise there might be
unexpected behavior.
Since
1.1.11
|
public
array|boolean
|
$serializer
|
|
#
the functions used to serialize and unserialize cached data. Defaults to
null, meaning using the default PHP serialize() and
unserialize() functions. If you want to use some more efficient
serializer (e.g. igbinary), you may configure this property with a two-element array. The first
element specifies the serialization function, and the second the deserialization
function. If this property is set false, data will be directly sent to and
retrieved from the underlying cache component without any serialization or
deserialization. You should not turn off serialization if you are using CCacheDependency cache dependency, because it relies on data serialization.
the functions used to serialize and unserialize cached data. Defaults to
null, meaning using the default PHP serialize() and
unserialize() functions. If you want to use some more efficient
serializer (e.g. igbinary), you may configure this property with a two-element array. The first
element specifies the serialization function, and the second the deserialization
function. If this property is set false, data will be directly sent to and
retrieved from the underlying cache component without any serialization or
deserialization. You should not turn off serialization if you are using CCacheDependency cache dependency, because it relies on data serialization.
|