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); } } } }
/** * @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; }