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
 /**
  * Поддержка мульти-запросов к кешу
  * Такие запросы поддерживает только memcached, поэтому для остальных типов делаем эмуляцию
  *
  * @param  array $aName Имя ключа
  * @return bool|array
  */
 public function multiGet($aName)
 {
     if (count($aName) == 0) {
         return false;
     }
     if ($this->sCacheType == SYS_CACHE_TYPE_MEMORY) {
         $aKeys = array();
         $aKv = array();
         foreach ($aName as $sName) {
             $aKeys[] = md5(Config::Get('sys.cache.prefix') . $sName);
             $aKv[md5(Config::Get('sys.cache.prefix') . $sName)] = $sName;
         }
         $data = $this->oBackendCache->load($aKeys);
         if ($data and is_array($data)) {
             $aData = array();
             foreach ($data as $key => $value) {
                 $aData[$aKv[$key]] = $value;
             }
             if (count($aData) > 0) {
                 return $aData;
             }
         }
         return false;
     } else {
         $aData = array();
         foreach ($aName as $key => $sName) {
             if (false !== ($data = $this->Get($sName))) {
                 $aData[$sName] = $data;
             }
         }
         if (count($aData) > 0) {
             return $aData;
         }
         return false;
     }
 }
 /**
  * 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  $cacheId                     Cache id
  * @param  boolean $noTestCacheValidity If set to true, the cache validity won't be tested
  * @return string|false cached datas
  */
 public function load($cacheId, $noTestCacheValidity = false)
 {
     return $this->_backend->load($cacheId, $noTestCacheValidity);
 }