Ejemplo n.º 1
0
 /**
  * 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'];
 }
Ejemplo n.º 2
0
 /**
  * Записать значение в кеш
  *
  * @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);
 }