public function actionIndex($refreshHours = 1)
 {
     $limit = 500;
     $offset = 0;
     $unistorageClient = Yii::$app->unistorage;
     $unistorageClient->useGetFileCache = false;
     $processedFiles = array();
     while ($rows = UnistorageCache::find()->limit($limit)->offset($offset)->where('ttl<:time', [':time' => time() + 3600 * $refreshHours])->andWhere('ttl>0')->andWhere(['not in', 'cachekey', $processedFiles])->all()) {
         foreach ($rows as $cache) {
             $file = @unserialize($cache->object);
             if (!in_array($cache->cacheKey, $processedFiles)) {
                 $processedFiles[] = $cache->cacheKey;
                 $file = $unistorageClient->getFile($file->resourceUri);
                 $unistorageClient->cacheFile($file, $cache->cacheKey);
             }
         }
     }
 }
Example #2
0
 /**
  * @param string $cacheKey
  * @return File|bool
  */
 public function getCachedFile($cacheKey)
 {
     if (false === ($file = Yii::$app->cache->get($cacheKey))) {
         /** @var $unistorageCache UnistorageCache */
         $unistorageCache = UnistorageCache::findOne(['cacheKey' => $cacheKey]);
         if (empty($unistorageCache)) {
             return false;
         }
         /** @var $file File */
         $file = @unserialize($unistorageCache->object);
         if (empty($file)) {
             Yii::error("Can't unserialize {$unistorageCache->cacheKey}", 'unistorage');
             return false;
         }
         if ($unistorageCache->ttl != 0 && $unistorageCache->ttl < time()) {
             // file expired. Refreshing
             $file = $this->refreshFile($file->resourceUri, $cacheKey);
         } elseif ($unistorageCache->ttl - time() > 0) {
             // resetting in cache
             Yii::$app->cache->set($cacheKey, $file, $unistorageCache->ttl - time());
         }
     }
     return $file;
 }