2013-11-21 23 views
2

在Laravel,我們可以存儲緩存,這一點:Laravel 4清除所有過期的緩存

Cache::put($dynamickey, 'value', $minutes); 

但這最終會是過期甚至在越來越多的緩存文件存儲。如果我們用php artisan cache:clearCache::flush();進行清潔時,它會清除所有緩存,包括那些仍然有效。

是否有可能具備自動清理,將清除過期只緩存?謝謝。

+0

你應該考慮類似的memcached或Redis的爲。 – ceejayoz

+0

爲什麼你不讓它過期?之後這些文件將被刪除。 – awei

回答

0
$value = Cache::remember('users', function() 
{ 
    return DB::table('users')->get(); 
}); 

做的工作。它驗證具有給定密鑰的緩存是否存在並返回其值。它不存在或過期,然後使用新值刷新給定緩存鍵。

對於圖像緩存我使用邏輯一樣:

  1. 撕毀圖像MD5($文件); //其中$ file ===完整圖像路徑 圖像名稱
  2. 存儲圖像md5(file_get_contents($ file)); //自解釋方法:)
  3. 然後

    如果(緩存::有($ cacheKey_name)& &緩存::有($ cacheKey_content)!) { 緩存::忘記($ cacheKey_name); 緩存::忘記($ cacheKey_content); }

它會檢查圖像是否緩存,只有內容改變。如果是,則刪除舊緩存並緩存新圖像(使用新內容)。有了這個邏輯,你將有永遠是新鮮的圖像內容(與覆蓋圖像)。或者,您可以隨時創建工匠任務並創建Controller以檢查存儲目錄中的所有緩存數據,然後創建Cron Task。

0

,你可以創建一個這樣

function cache($key,$value,$min){ 

    (Cache::has($key))?Cache::put($key,$value,$min):Cache::add($key,$value,$min); 


if(Cache::has('caches')){ 
    $cache=Cache::get('caches'); 
    $cache[time()+(60*$min)]=$key; 
    Cache::forget('caches'); 
    Cache::rememberForever('caches',function() use($cache){ 
     return $cache; 
    }); 
}else{ 
    $cache[time()+(60*$min)]=$key; 
    Cache::rememberForever('caches',function() use($cache){ 
     return $cache; 
    }); 
} 
$cache=Cache::get('caches'); 
foreach($cache as $key=>$value) 
{ 
    if($key<time()) 
    { 
     Cache::forget($value); 
     array_forget($cache, $key); 
    } 
} 
Cache::forget('caches'); 
Cache::rememberForever('caches',function() use($cache){ 
    return $cache; 
});} 

的功能,並刪除該緩存空文件夾,你可以將此代碼

public function forget($key) 
{ 
    $file = $this->path($key); 

    if ($this->files->exists($file)) 
    { 
     $this->files->delete($file); 

附加後的線路182 編輯

vendor\laravel\framework\src\Illuminate\Cache\FileStore.php 

一個刪除所有空文件夾的功能,如打擊代碼

public function forget($key) 
{ 
    $file = $this->path($key); 

    if ($this->files->exists($file)) 
    { 
     $this->files->delete($file); 
     RemoveEmptySubFolders($this->getDirectory()); 

使用此功能,你可以看到它 Remove empty subfolders with PHP