/** * Test if a cache is available for the given id and (if yes) return it (false else) * * Note : return value is always "string" (unserialization is done by the core not by the backend) * * @param string $id Cache id * @param boolean $doNotTestCacheValidity If set to true, the cache validity won't be tested * @return string|false cached datas */ public function load($id, $doNotTestCacheValidity = false) { self::_validateIdOrTag($id); $res = $this->_fastBackend->load($id, $doNotTestCacheValidity); if ($res === false) { $res = $this->_slowBackend->load($id, $doNotTestCacheValidity); if ($res === false) { // there is no cache at all for this id return false; } } $array = unserialize($res); // maybe, we have to refresh the fast cache ? if ($this->_options['auto_refresh_fast_cache']) { if ($array['priority'] == 10) { // no need to refresh the fast cache with priority = 10 return $array['data']; } $newFastLifetime = $this->_getFastLifetime($array['lifetime'], $array['priority'], time() - $array['expire']); // we have the time to refresh the fast cache $usage = $this->_getFastFillingPercentage('loading'); if ($array['priority'] > 0 && 10 * $array['priority'] >= $usage) { // we can refresh the fast cache $preparedData = $this->_prepareData($array['data'], $array['lifetime'], $array['priority']); $this->_fastBackend->save($preparedData, $id, array(), $newFastLifetime); } } return $array['data']; }
/** * Записать значение в кеш * * @param mixed $data Данные для хранения в кеше * @param string $sName Имя ключа * @param array $aTags Список тегов, для возможности удалять сразу несколько кешей по тегу * @param int $iTimeLife Время жизни кеша в секундах * @return bool */ public function Set($data, $sName, $aTags = array(), $iTimeLife = false) { if (!$this->bUseCache) { return false; } /** * Т.к. название кеша может быть любым то предварительно хешируем имя кеша */ $sName = md5(Config::Get('sys.cache.prefix') . $sName); if ($this->sCacheType == SYS_CACHE_TYPE_FILE) { $data = serialize($data); } return $this->oBackendCache->save($data, $sName, $aTags, $iTimeLife); }
/** * Save some string datas into a cache record * * Note : $data is always "string" (serialization is done by the * core not by the backend) * * @param string $data Datas to cache * @param string $cacheId Cache id * @param string[] $tags Array of strings, the cache record will be tagged by each string entry * @param bool $specificLifetime If != false, set a specific lifetime for this cache record * (null => infinite lifetime) * @param int $priority integer between 0 (very low priority) and 10 (maximum priority) used by * some particular backends * @return bool true if no problem */ public function save($data, $cacheId, $tags = [], $specificLifetime = false, $priority = 8) { return $this->_backend->save($data, $cacheId, $tags, $specificLifetime, $priority); }