* @var Connection|string the MongoDB connection object or the application component ID of the MongoDB connection.
* After the Cache object is created, if you want to change this property, you should only assign it
* with a MongoDB connection object.
*/
public$db='mongodb';
/**
* @var string|array the name of the MongoDB collection that stores the cache data.
*/
public$cacheCollection='cache';
/**
* @var integer the probability (parts per million) that garbage collection (GC) should be performed
* when storing a piece of data in the cache. Defaults to 100, meaning 0.01% chance.
* This number should be between 0 and 1000000. A value 0 meaning no GC will be performed at all.
**/
public$gcProbability=100;
/**
* Initializes the Cache component.
* This method will initialize the [[db]] property to make sure it refers to a valid MongoDB connection.
* @throws InvalidConfigException if [[db]] is invalid.
*/
publicfunctioninit()
{
parent::init();
if(is_string($this->db)){
$this->db=Yii::$app->getComponent($this->db);
}
if(!$this->dbinstanceofConnection){
thrownewInvalidConfigException($this->className()."::db must be either a MongoDB connection instance or the application component ID of a MongoDB connection.");
}
}
/**
* 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.
* @param string $key a unique key identifying the cached value
* @return string|boolean the value stored in cache, false if the value is not in the cache or expired.
*/
protectedfunctiongetValue($key)
{
$query=newQuery;
$row=$query->select(['data'])
->from($this->cacheCollection)
->where([
'id'=>$key,
'$or'=>[
[
'expire'=>0
],
[
'expire'=>['$gt'=>time()]
],
],
])
->one($this->db);
if(empty($row)){
returnfalse;
}else{
return$row['data'];
}
}
/**
* 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.
* @param string $key the key identifying the value to be cached
* @param string $value the value to be cached
* @param integer $expire the number of seconds in which the cached value will expire. 0 means never expire.
* @return boolean true if the value is successfully stored into cache, false otherwise